#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, поэтому вы можете применить наложение к псевдониму, но не к исходному окну браузера.