2015-02-06 3 views
0

Я хотел бы использовать только 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

Я кажется, что делает это возможным, поскольку есть надстройка делать это, и выглядит как его только пару строк, но что эта линия, по-видимому, является секретом, более тщательно охраняемым, чем ядерные коды запуска.

Итак, вернемся к охоте на каждую маленькую кроличью тропу и обнаруживаем больше тупиков, по крайней мере, до тех пор, пока кто-то не захочет проливать бобы.

ответ

0

Ну, это момент Ой. Но поскольку я видел, что многие из этих сообщений остаются без ответа, я собираюсь опубликовать ответ.

<?xml version="1.0"?> 

<?xml-stylesheet href="main.css" type="text/css"?> 

<window id="main" title="My App" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 

    <vbox flex="1"> 
     <browser id="mainbrowser" src="http://www.mylocaldomain.com/main.xul" flex="1" /> 
    </vbox> 

</window> 

Это действительно так просто. Элемент браузера очень мощный и может запускать XUL с любого URL без дополнительной настройки. Обратите внимание, что нет javascript выше, и что касается моего pref.js, вам нужно только начать мой локальный main.xul, а затем 5 дополнительных параметров, которые помогают отлаживать. Я бы даже удалил таблицу стилей, но на данный момент похоже, что есть ошибка, которая вынуждает XULrunner в полноэкранный режим, когда я удаляю его.

Я рассматривал этот вопрос и строил работу вокруг в течение последних 2 месяцев. Я не могу поверить, что все время я тратил на то, что имело такое простое решение.

 Смежные вопросы

  • Нет связанных вопросов^_^