XULRunner: запретить ссылки на произвольные домены

предположим, у нас есть приложение Mozilla Prism, подобное XULRunner. Имеется окно XUL с элементом ‹browser/>, в котором браузер показывает веб-страницу в заданном домене (скажем, example.com).

Сейчас на example.com есть несколько ссылок. Если пользователь переходит по локальной ссылке (т. е. остается на сайте example.com), ему должно быть разрешено перейти. Если, с другой стороны, ссылка ведет на elpmaxe.moc, должна быть (я не против) любая из этих двух возможностей:

  • Откроется «настоящий» браузер (как в Prism), или
  • Ничего не произошло.

Любые идеи, как это сделать? Недостаточно использовать browser.document.onload или DOMready или подобные события, потому что ссылка должна быть надежно заблокирована даже во время загрузки страницы (т.


person Boldewyn    schedule 24.06.2009    source источник
comment
Хм, возможным (но еще не проверенным) решением может быть: browser.document.addEventListener (выгрузить, ...), но я все еще не знаю, как определить, куда идет путешествие.   -  person Boldewyn    schedule 24.06.2009


Ответы (1)


Похоже, вам нужна функциональность, аналогичная той, которую предоставляет BlockSite, кроме вас. хотите внести домен приложения в белый список и заблокировать все остальное. Существует некоторая документация MDC по установке расширений в XUL Runner, которая может помочь.

В качестве альтернативы вы можете просмотреть исходный код и попытаться выяснить, где он подключается — это позволит вам реализовать поведение, альтернативное простой блокировке, и избежать доставки расширения с вашим приложением. Я думаю, BlockSite.js — это ключевой файл, похоже, здесь добавляется обработчик (строка 171):

var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(BlockSiteObserver, "http-on-modify-request", false);

Функция BlockSiteObserver определена в приведенном выше коде.

person robertc    schedule 08.07.2009
comment
Прохладный! Спасибо, что указали мне на это. Выглядит очень многообещающе. Как только я смогу проверить это (это должно быть сделано на этой неделе), я приму ответ. - person Boldewyn; 08.07.2009
comment
Да, наблюдатель — это именно то, что я искал. Спасибо! - person Boldewyn; 12.07.2009