#firefox #firefox-addon #xul
#firefox #firefox-дополнение #xul
Вопрос:
У вас есть плагин, который установлен как часть приложения, плагин должен использовать разные наложения в зависимости от того, какая версия FF используется, поскольку она изменяет интерфейс.
Я нашел https://developer.mozilla.org/en/Bundles указать разные файлы, но, похоже, это касается только ОС / разрядности.
Есть ли способ указать, что наложение применяется только к определенным версиям пользовательского интерфейса?
ie. Это работает для FF3.6 и более ранних версий, но нарушает FF4
<overlay id="myOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<dialog id="commonDialog" onload="commonDialogOnLoad(); myLoad();"
ondialogaccept="myAccept(); return commonDialogOnAccept();">
Это предназначено для входа в домен и диалоговых окон входа по FTP, поэтому идея сделать его более конкретным также может помочь.
Ответ №1:
Я не делал этого сам, но я думаю, вы можете добиться этого эффекта, используя флаги в вашем chrome.manifest
файле. Смотрите https://developer.mozilla.org/en/Chrome_Registration#Manifest_flags
Комментарии:
1. Кажется, это помогает,
appversion>=4.0
для нового файла наложения для FF $ иappversion<=3.*
для старого файла.
Ответ №2:
Технически, ответ MatrixFrog верен, вы можете использовать флаги в вашем файле chrome.manifest. Однако вам лучше учитывать тот факт, что ваш код выводит Firefox 4 из строя, как предупреждение — этот подход не следует использовать, он, вероятно, нарушит функциональность браузера. Кроме того, что, если второе расширение попытается сделать то же самое? Вы должны расширять встроенную функциональность, а не перезаписывать ее. Ваша цель, по-видимому, запустить свой собственный код при загрузке общего диалогового окна. Пожалуйста, рассмотрите следующий подход:
<overlay id="myOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="text/javascript"><![CDATA[
window.addEventListener("load", function()
{
// Your code here
}, false);
]]></script>
</overlay>
Это решает две проблемы. Во-первых, вам больше не нужно переопределять существующий обработчик для события «load» — addEventListener позволяет регистрировать столько обработчиков событий, сколько вы хотите, в отличие от атрибута / свойства onload. Другая проблема: вы добавляли функцию myLoad() в глобальное пространство имен общего диалогового окна. Если Firefox code или какое-либо другое расширение решит использовать то же имя функции в будущем, возникнут проблемы. Приведенный выше код полностью устраняет эту проблему, используя анонимную функцию — конфликтов имен быть не может.
Комментарии:
1. Я понимаю вашу точку зрения, хотя немного запутался в деталях. Разве это не должно по-прежнему находиться в теге dialog, чтобы применяться только к CommonDialog, а не на верхнем уровне?
2. Теги скрипта обрабатываются особым образом — вы можете просто поместить их внутри наложения, и они будут выполняться, когда наложение будет применено. Нет необходимости явно помещать их внутри
<dialog>
тега, именно там они в любом случае окажутся. Примечание: Обычно единственное, что вы должны сделать при выполнении этого скрипта, — это зарегистрировать прослушиватель дляload
события. Выполнение чего-либо еще доload
события может привести к поломке (например, другие наложения больше не будут применяться), это распространенная ошибка.3. Пытался добавить прослушиватель событий для ‘load’, и когда это не сработало для ‘loadComplete’, который также не сработал так, как я ожидал. Необходимо выполнить некоторые дополнительные изменения после стандартной настройки — важен порядок вызова события onload. (возможно, мне следует задать другой вопрос)
4. Да, вероятно, стоит задать новый вопрос — на самом деле это не связано.