다음 코드가 :.onload는 파이어 폭스 확장 기능에서 여러 번 호출 나는 파이어 폭스 확장 기능을 개발하고있어
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');
};
}
- 내가 확장 (사이드 바)를 열고 내에서 새 탭을 열 진행 Firefox 창에는 세 개의 경고 상자가 있습니다.
- 페이지를 새로 고치면 두 개의 경고 상자이 있습니다.
- 페이지로드가 끝나면 하나의 경고 상자 만 있습니다.
- 탭을 변경하면 경고가 발생합니다.
광산을 실행하기 전에 다른 모든 자바 스크립트가 페이지로드를 완료 할 때까지 기다려야하므로 DOMContentLoaded 또는 readystatechange 대신 .onload를 사용합니다.
여러 이벤트가 트리거되는 이유 및 이벤트가 트리거되지 않아야하는 이유에 대한 아이디어가 있습니까?
가 가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;
if (gBrowser.addEventListener) {
gBrowser.addEventListener("load",pageLoaded,true);
}
}
function pageLoaded(aEvent) {
if ((aEvent.originalTarget.nodeName == '#document') &&
(aEvent.originalTarget.defaultView.location.href == gBrowser.currentURI.spec))
{
alert('loaded');
}
}
페이지가로드 aEvent.originalTarget.nodeName == '#document가'확인
- 되어 것을 : MatrixFrog의 제안에서 다음
솔루션
, 나는 여기에 온 솔루션입니다 파비콘이 아닙니다.
- (aEvent.originalTarget.defaultView.location.href == gBrowser.currentURI.spec))은 이벤트를 발생시킨 요소는 하나의 IFRAME 탭의 페이지는 아닌 것을 확인
- gBrowser.onload 것 xul-image에만 적용되고 #document에는 적용되지 않으므로 gBrowser.addEventListener ("load", pageLoaded, true)로 대체되었습니다. !
- 확실 gBrowser.currentURI.spec을, 새로운 빈 탭에 대한 이벤트를 발사 피하려면 = "에 대해 : 빈"
하나의 탭 (집중된 탭)에 대해서만 페이지가 다른 Firefox 탭에로드 될 때 제안 된 솔루션은 처리 할 수 없습니다. aEvent.originalTarget.defaultView.location.href == gBrowser.currentURI.spec은 true로 평가됩니다. –