Firefox Addons: скрытый <браузер /> в оверлее XUL? - PullRequest
0 голосов
/ 12 сентября 2011

Я пытаюсь загрузить и манипулировать скрытым тегом <browser /> в моем оверлее (часть функциональности моего аддона) в моем аддоне Firefox. Но я не могу получить доступ ни к одному из элементов, которые я добавляю в оверлей с document.

Например, это не работает:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://foxy_bucks/skin/overlay.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://foxy_bucks/locale/overlay.dtd">
<overlay id="foxy_bucks-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <browser id="bContainer" src="http://google.com/"></browser>
    <script type="text/javascript">
        window.addEventListener("load", function(){
            alert(document.bContainer.src);
        }, false);
    </script>
</overlay>

Может ли кто-нибудь указать мне правильное направление?

1 Ответ

4 голосов
/ 20 сентября 2011

Наложения всегда должны расширять существующий элемент.Если у вас есть тег на верхнем уровне наложения с идентификатором, который еще не существует в документе, тогда этот элемент просто игнорируется (теги <script> являются заслуживающим внимания исключением из правила).Это происходит в вашем случае, ID bContainer не существует в наложенном вами документе, поэтому ваш тег <browser> просто игнорируется.Этот механизм позволяет, например, иметь содержимое для меню инструментов Firefox и SeaMonkey в одном и том же наложении - это меню имеет разные идентификаторы в Firefox и SeaMonkey, поэтому раздел, перекрывающий меню SeaMonkey, просто игнорируется в Firefox и наоборот.

Если вы хотите добавить элемент в документ, вам нужно наложить его корневой элемент.Для окна браузера Firefox это будет выглядеть следующим образом (обратите внимание, что main-window - это идентификатор корневого элемента):

<overlay id="foxy_bucks-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <window id="main-window">
    <browser id="bContainer" src="http://google.com/"></browser>
  </window>
  ...
</overlay>

Примечание: для доступа к элементу по его идентификатору необходимо использоватьdocument.getElementById():

alert(document.getElementById("bContainer").src);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...