Я разрабатываю расширение для 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');
};
}
Я использую .onload, а не DOMContentLoaded или readystatechange, так как мне нужно подождать, пока все остальные javascript не закончат загрузку на странице, прежде чем запускать свою.
Любой идеи относительно того, почему несколько событий запускаются (и для вещей, которые событие не должно
Из https://developer.mozilla.org/en/Code_snippets/On_page_load
Текущие ночные сборки ствола Firefox будут запускать функцию onPageLoad не только для документов, но и для
xul: image
s (значки в tabbrowser). Если вы хотите обрабатывать только документы, убедитесь, чтоaEvent.originalTarget.nodeName == "#document"
Если вы все еще наблюдаете запуск посторонних событий 'load', вы можете проверить цель события, чтобы выяснить что загружается, и используйте аналогичную логику, чтобы избежать вызова логики вашего расширения в определенных конкретных случаях.