XUL: Как включить и расширить другой файл .xul?

#firefox-addon #xul

#firefox-дополнение #xul

Вопрос:

Мне нравится создавать окно, расширяя базовое окно Firefox, которое определено в chrome://browser/content/browser.xul как элемент верхнего уровня (не накладывается).

Мой вопрос касается ветвления / разветвления из базового определения окна до того, как к нему будут применены какие-либо изменения с помощью другого расширения, и не касается того, как применить наложение или модификацию к тому, что пользователь видит как главное окно FF.

У вас есть какие-нибудь идеи, как это сделать?

Ответ №1:

Ваш вопрос по-прежнему касается наложений. Ваше наложение должно выглядеть следующим образом:

 <overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <window id="main-window">
        <commandset id="my-commands">
            ...
        </commandset>
    </window>
</overlay>
  

В этом примере будет добавлен <commandset> элемент в корень окна браузера (который, оказывается, является <window> элементом с идентификатором main-window ).

Редактировать: Похоже, что вопрос был не о добавлении элементов на верхнем уровне, а скорее о создании форка существующего документа XUL. Вы можете создать псевдоним, добавив override директиву в свой chrome.manifest:

 override chrome://myextension/content/browser.xul chrome://browser/content/browser.xul
  

Теперь вы можете применить наложение к псевдониму ony:

 overlay chrome://myextension/content/browser.xul chrome://myextension/content/browserOverlay.xul
  

К URL-адресам применяются оверлеи, которые делают это возможным. Теперь вы можете открыться chrome://myextension/content/browser.xul в новом окне, и это должно быть окно браузера, но с наложенным вашим оверлеем. Пожалуйста, обратите внимание, что этот подход имеет ограничения, например, расширения, накладывающиеся на окно браузера, не будут влиять на ваше окно (их наложения применяются только к исходному URL окна браузера).

Комментарии:

1. Я сохранил это как my.xul, а затем открыл его с помощью chrome: //… но это ничего не показывает. Просмотр исходного кода показывает только мое содержимое.xul, содержимое browser.xul не объединяется.

2. В своем вопросе я указал, что мне не нужно вносить какие-либо изменения в browser.xul, который просматривается пользователем как окно FF, но создать другое окно, разветвляющееся из базового окна FF (browser.xul без объединения с другими оверлеями дополнений).

3. О боже, вы не могли бы сформулировать это более запутанно… Чтобы создать «форк» окна Firefox, добавьте это в свой chrome.manifest: override chrome://myextension/content/browser.xul chrome://browser/content/browser.xul Теперь примените наложение только к вашей «раздвоенной» версии: overlay chrome://myextension/content/browser.xul chrome://myextension/content/browserOverlay.xul Вот и все, теперь вы можете открыть chrome://myextension/content/browser.xul в новом окне.

4. Должен ли я ожидать override объединения базового FF browser.xul с моим browser.xul?

5. Со словом fork проблем нет — оно просто здесь не совсем применимо. override создаст новый псевдоним для обычного документа browser.xul. Наложения применяются по URL, поэтому вы можете применить наложение к псевдониму, но не к исходному окну браузера.