.onload вызывается несколько раз из расширения Firefox

Я разрабатываю расширение для Firefox и имею следующий код:

function initialize() { 
    // For accessing browser window from sidebar code.
    var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
               .getInterface(Components.interfaces.nsIWebNavigation)
               .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
               .rootTreeItem
               .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
               .getInterface(Components.interfaces.nsIDOMWindow);
    var gBrowser = mainWindow.gBrowser;
    gBrowser.onload = function() {
        alert('loaded');
    };
}
  1. Когда я открываю расширение (боковую панель) и продолжаю открывать новую вкладку в Firefox В этом окне есть три окна оповещений.
  2. Когда я обновляю страницу, появляются два окна оповещений.
  3. Когда страница завершает загрузку, появляется только одно окно оповещения. .
  4. Когда я меняю вкладки, выдается предупреждение.

Я использую .onload, а не DOMContentLoaded или readystatechange, так как мне нужно подождать, пока все остальные javascript не закончат загрузку на странице, прежде чем запускать свою.

Любой идеи относительно того, почему несколько событий запускаются (и для вещей, которые событие не должно

9
задан Brian Tompsett - 汤莱恩 13 July 2019 в 23:59
поделиться

1 ответ

Из https://developer.mozilla.org/en/Code_snippets/On_page_load

Текущие ночные сборки ствола Firefox будут запускать функцию onPageLoad не только для документов, но и для xul: image s (значки в tabbrowser). Если вы хотите обрабатывать только документы, убедитесь, что aEvent.originalTarget.nodeName == "#document"

Если вы все еще наблюдаете запуск посторонних событий 'load', вы можете проверить цель события, чтобы выяснить что загружается, и используйте аналогичную логику, чтобы избежать вызова логики вашего расширения в определенных конкретных случаях.

7
ответ дан 3 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: