Дополнение Firefox: определение, является ли текущая страница страницей дополнения - PullRequest
0 голосов
/ 26 августа 2011

Я работаю над аддоном Firefox в Mac OS, где я хочу уведомлять свой компонент XPCOM, когда пользователь отключает надстройку. Это работает, за исключением того, что событие публикуется более одного раза (равно числу открытых окон FF). ), это происходит, так как AddonManager.addAddonListener (nsListener); вызывается в onload (window.addEventListener ("load", function (e) {TopWnd.onLoad (e);}, false);) в оверлейном браузере js для всех окон, а событие "onDisabling" вызывается в каждом окне ,

var nsListener = {
    onDisabling: function(addon, needsRestart) 
{
        if (addon.id.toLowerCase() == "XXXXXXX") 
{
        var observerService = Components.classes["@mozilla.org/observer-service;1"]
                            .getService(Components.interfaces.nsIObserverService);
            if (observerService) {
                observerService.notifyObservers(null, "ext-disable", "Ext is disabled");
            }

        }
    }

}

Чтобы не уведомлять компонент XPCOM из всех окон, я хочу определить, является ли текущая открытая вкладка / окно страницей надстройки, и только затем добавить AddonManager.addAddonListener (nsListener); или уведомить только с этой страницы. Каков наилучший способ определить, является ли текущее окно / вкладка дополнительной страницей.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 26 августа 2011

Я думаю, что этот подход неправильный. Вы не должны регистрировать этот слушатель в каждом окне, он должен быть зарегистрирован только один раз в центральном месте. Тогда вы избегаете проблемы с несколькими окнами, а также проблемы, связанной с тем, что иногда окна не открываются (возможно в Mac OS X). Имеет смысл зарегистрировать этот слушатель непосредственно в вашем компоненте XPCOM. Однако, если по какой-то причине это невозможно - у вас все еще может быть модуль JavaScript , который будет импортироваться каждым окном и который будет регистрировать этого слушателя (модуль JavaScript загружается только один раз, независимо от того, как часто это происходит. импортировано, поэтому только один слушатель будет зарегистрирован).

Примечания: не используйте общие названия тем, такие как ext-disabled (при условии, что это действительно тема, которую вы используете), другие расширения могут решить использовать то же имя, и будет большой беспорядок. Используйте то, что относится к имени вашего расширения, чтобы оно не было выбрано другими разработчиками. Кроме того, использование службы наблюдателя для связи с вашим собственным компонентом XPCOM, по меньшей мере, странно, почему бы не получить экземпляр этого компонента XPCOM и напрямую вызывать его методы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...