2010-11-26 6 views
4

Мне интересно, возможно ли обработать запрос для компонента Xul Browser, чтобы открыть новое окно? Я попытался изменить функцию window.open, но похоже, что он никогда не вызывался. Все ссылки, открытые в новом окне, не открываются в моем приложении.Как открыть новое окно из браузера XUL?

Я нашел this page на эту тему, но в представленном ниже решении непохожи.

Любой намек на это?

(кстати, я занимаюсь разработкой в ​​одиночку стенд приложение, а не расширение Firefox, в)

ответ

1

Я предполагаю, что вы находитесь в приложении XULRunner, и что вы пытаетесь загрузить хром URL из источника, не хромированная в браузере (например, HTTP или локальный файл). Хотя включение UniversalXPConnect и UniversalBrowserWrite может быть полезным, они также представляют угрозу безопасности (поскольку любой произвольный скрипт в Интернете может их использовать), поэтому они, как правило, отключены в браузерах (например, запуск этой строки в Firebug даст вам исключение):

>>> netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite"); 
Error: A script from "http://stackoverflow.com" was denied UniversalXPConnect UniversalBrowserWrite privileges. 

Как насчет того, чтобы вы попытались использовать принципы безопасности на основе кода и посмотреть, не изменилось ли это? (Http://www.mozilla.org/projects/security/components/signed-scripts.html#codebase). Для меня в Firebug это позволяет мне получить дополнительные разрешения после того, как я ОК с большим, неприятным диалоговым окном), но все же не позволяет мне открывать URL-адрес Chrome с помощью window.open. Следующим шагом, вероятно, является попытка изменить файл conf для использования contentaccessible, чтобы доступная часть вашего контента была доступна (см. https://developer.mozilla.org/en/Chrome_Registration#contentaccessible).

Чтобы избежать неприятного сообщения при повышении разрешений, вы можете попробовать настроить разрешения для правильных файлов автоматически, как описано в http://forums.mozillazine.org/viewtopic.php?f=38&t=1769555.

Кроме того, убедитесь, что вы проверяете тип браузера (https://developer.mozilla.org/en/XUL/Attribute/browser.type). Если тип браузера не является хром, то, возможно, стоит попробовать сделать его хром и посмотреть, если это имеет значение.

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

0

делает нормальный JS не работает?

window.open(url,windowname,flags); 
+0

yes * (минимум символов в комментарии 15, вы не ненавидите это?) * – 2010-12-09 16:18:23

+0

также, я пытался привязать свою функцию к window.open, так что я мог видеть, было ли это вызвано , и это не так. – 2010-12-09 16:22:00

0

Есть два способа, которыми я знаю.

Первым является установка browser.chromeURL предпочтительного URL-адреса хрома, содержащего <browser type="content-primary">. Страница, которую попыталось открыть окно содержимого, загрузится в данный браузер.

Второй заключается в том, чтобы установить свойство window.browserDOMWindow с объектом, который вы определяете для реализации интерфейса nsIBrowserDOMWindow. Это позволяет переадресовать открытый вызов на вкладку, если вы используете интерфейс с вкладками. Примечание. Настройки просмотра с вкладками должны быть настроены так, чтобы окна были переадресованы на вкладки, иначе XULrunner вернется на browser.chromeURL.

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