getElementById связанный с XBL XUL-элемент

Я пытаюсь получить доступ к элементу XUL, который был привязан к XBL. Я хочу управлять им из javascript.

Это привязка.

<binding id="imip-throbber">
    <resources>
          <stylesheet src="chrome://lightning/skin/lightning-widgets.css"/>
    </resources>
    <content pack="center" align="center">
        <xul:image anonid="loading-throbber" src="chrome://global/skin/icons/loading_16.png" hidden="false"/>
    </content>
</binding>

Это привязка CSS

imip-throbber {
  -moz-binding: url(chrome://lightning/content/lightning-widgets.xml#imip-throbber);
}

это реализация xul

<

lightning-notification-bar id="imip-bar"
                                    collapsed="true"
                                    insertbefore="msgHeaderView"
                                    label="&lightning.imipbar.description;">

          <button id="imip-button1"
                  class="imip-button"
                  hidden="true"/>
          <button id="imip-button2"
                  class="imip-button"
                  hidden="true"/>
          <button id="imip-button3"
                  class="imip-button"
                  hidden="true"/>

    <imip-throbber id="loading-lbl">
</lightning-notification-bar>

Это доступ к javascript

let imipThrobble = document.getElementById("loading-lbl");

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


person Marlio    schedule 24.04.2014    source источник


Ответы (1)


Не так просто...

Об этом говорится в документации XBL на MDN. «анонимный» контент, автоматически добавляемый XBL:

Элементы в теге содержимого [xml-файла привязки XBL] добавляются к полосе прокрутки анонимно. Хотя анонимный контент отображается на экране, вы не можете получить к нему доступ через сценарий обычным способом. Для XUL это как если бы был только один элемент, хотя на самом деле он состоит из нескольких элементов.

(выделено мной).

В любом случае...

Далее в ссылке XBL 1.0 на MDN говорится:

По сути, анонимный контент существует в своем собственном изолированном кармане внутри документа. Используя parentNode, анонимные узлы контента могут ссылаться на своих явных родителей, но явные родители ничего не знают о своих анонимных потомках. Анонимный контент недоступен через список childNodes для связанного элемента, а также он недоступен с помощью firstChild/nextSibling для перебора дочерних элементов связанного элемента. Анонимный контент доступен только с помощью специальных методов, таких как getAnonymousNodes и getAnonymousElementByAttribute.

Таким образом, вы можете использовать getAnonymousNodes / getAnonymousElementByAttribute для доступа к анонимному контенту, автоматически вставляемому привязкой XBL. Эти методы в основном используются кодом JavaScript в самих привязках (или связаны с ними), однако вы можете использовать их из JavaScript, привязанного к XUL DOM. Некоторые примеры на MDN.

Но почему?

Лучше задать вопрос: почему вы хотите получить доступ к этим элементам из JavaScript, привязанного к XUL DOM?

Хорошей причиной может быть то, что вы не написали привязки и хотите «обновить» их с помощью некоторого другого контента/поведения на лету. Если, с другой стороны, вы написали рассматриваемые привязки XBL, почему бы не выполнить то, что вы пытаетесь сделать в рамках JavaScript, привязанного к элементу XBL? Вы можете добавить методы JavaScript в свои элементы, у которых уже есть доступ к анонимному содержимому (а также к остальной части XUL DOM).

person David-SkyMesh    schedule 03.05.2014