Я хотел бы использовать только PHP (через локальный сервер AMPPS) для генерации всего моего XUL. Похоже, что XULrunner не позволит загружать «удаленный» URL (то есть http://mylocaldomain.com
).Разрешения XULrunner для загрузки удаленных XUL
Я выполнил большой объем поиска, и я вижу ответы, которые выглядят как ответ, но они неопределенны или довольно стары, и я не могу заставить их работать. То, что я думаю, что это отношение ответ заключается в использовании nsIPermissionManager, есть пример на https://developer.mozilla.org/en-US/docs/Using_Remote_XUL, но я не могу заставить его работать
Components.classes["@mozilla.org/permissionmanager;1"]
.getService(Components.interfaces.nsIPermissionManager)
.add('http://www.mylocaldomain.com/', 'allowXULXBL', Components.interfaces.nsIPermissionManager.ALLOW_ACTION);
Я пытался загрузить его в pref.js
, а также в начале моего main.js
и не работает. Если бы я поместить его в моем main.js
файле Консоль ошибок в XulRunner дает эту ошибку
Error: NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIPermissionManager.add]
и если я запускаю его в Firefox, я получаю эту ошибку
TypeError: Components.classes is undefined
Я также нашел этот пост здесь, Is it possible to reference remote content from chrome.manifest? (XULRunner) который в основном вы хотите разместить application.ini
и defaults\preferences\prefs.js
на своем сервере и запустить их оттуда. Поэтому, если я запускаю свое приложение с "...\xulrunner.exe" -app http://www.mylocaldomain.com/application.ini -jsconsole
, XULrunner просто говорит, что он не может разобрать application.ini
.
Итак, вопрос, как настроить в XULrunner настройку для использования удаленного URL-адреса?
Edit: Round 2 (ну больше как круглый 50, но кто рассчитывает)
Удивительно, что нет ни одного учебника на удаленном XUL. Я купил книгу Introductory XUL не слово во всей книге о дистанционном XUL. Да, я мог бы купить другую книгу, но с возрастом следующая в списке была с 2007 года, прежде чем Mozilla искалечила XULrunner.
С идеей книги, провалившейся, хотя есть надстройка, Remote XUL Manager. Позвольте просто проанализировать его. Из его почти 1000 строк кода похоже, что для разрешения удаленного URL-адреса требуется 2 строки.
В permissions.js в строках 97 Вы
Services.perms.add(uri, ALLOW_REMOTE_XUL, ALLOW);
и линии 143 у вас есть
Services.io.newURI(aDomainString, null, null);
Соединенный и переменные заменены вы получаете
var uri = Services.io.newURI('http://www.mylocaldomain.com', null, null);
Services.perms.add(uri, "allowXULXBL", 1);
Чтобы запустить его, он выглядит как вы должны добавить это до этого
Components.utils.import("resource://gre/modules/Services.jsm");
Но при том, что работает в XulRunner я получаю эту ошибку
TypeError: Components.utils is undefined
так же, как и раньше.Так немного прибегая к помощи, и я обнаружил, что мне это нужно
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
поэтому я добавил его в верхней части моего кода и получил эту ошибку
TypeError: netscape.security.PrivilegeManager is undefined
И если вы Google для xulrunner "netscape.security.PrivilegeManager is undefined"
вы получите 4 результатов (с этим сообщением я предполагаю, что теперь это будет 5). К счастью, если вы удалите xulrunner
, вы получите больше результатов и немного чтения между строками, которые выглядят как netscape.security.PrivilegeManager
(obsolete reference).
По одному из моих запросов xulrunner "Components.utils is undefined"
(еще 4 результатов) поднял сообщение здесь, SO, Firefox Add-on SDK and js-ctypes. Основываясь на том, что я попробовал этот
const {Cu} = require('chrome');
Cu.import("resource://gre/modules/Services.jsm");
var uri = Services.io.newURI('http://www.mylocaldomain.com', null, null);
Services.perms.add(uri, "allowXULXBL", 1);
Который дает эту ошибку
ReferenceError: require is not defined
Я кажется, что делает это возможным, поскольку есть надстройка делать это, и выглядит как его только пару строк, но что эта линия, по-видимому, является секретом, более тщательно охраняемым, чем ядерные коды запуска.
Итак, вернемся к охоте на каждую маленькую кроличью тропу и обнаруживаем больше тупиков, по крайней мере, до тех пор, пока кто-то не захочет проливать бобы.