मैं एक Firefox विस्तार विकसित कर रहा हूँ और निम्नलिखित कोड है:.onload 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');
};
}
- जब मैं विस्तार (एक साइडबार) खोलने के लिए और भीतर एक नया टैब खोलने के लिए आगे बढ़ें फ़ायरफ़ॉक्स विंडो, तीन अलर्ट बॉक्स हैं।
- जब मैं एक पृष्ठ रीफ्रेश करता हूं, तो दो अलर्ट बॉक्स हैं।
- जब कोई पृष्ठ लोड हो जाता है, तो केवल एक चेतावनी बॉक्स होता है।
- जब मैं टैब बदलता हूं, तो एक चेतावनी निकाल दी जाती है।
मैं उपयोग करता हूं। DOMContentLoaded या readystatechange के बजाय अधिभार का उपयोग करें क्योंकि मुझे प्रतीक्षा करने की आवश्यकता है जब तक कि मैं अन्य सभी जावास्क्रिप्ट को चलाने से पहले किसी पृष्ठ पर लोडिंग समाप्त नहीं कर लेता।
कोई भी विचार क्यों कि कई घटनाएं ट्रिगर की जा रही हैं (और उन चीजों के लिए जिनके लिए ईवेंट ट्रिगर नहीं किया जाना चाहिए)?
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)) की जाँच करता है कि तत्व यह है कि गतिविधि सक्रिय टैब में पृष्ठ है, और नहीं अपने iframes में से एक
- gBrowser.onload होगा केवल xul-image के लिए आग और # दस्तावेज़ के लिए नहीं, इसलिए इसे gBrowser.addEventListener ("load", pageLoaded, true) के साथ प्रतिस्थापित किया गया था; !
- आप नए खाली टैब के लिए घटना फायरिंग से बचने के लिए, सुनिश्चित करें कि gBrowser.currentURI.spec बनाने चाहते हैं = "about: blank"
प्रस्तावित समाधान संभाल नहीं सकता है जब पेज अलग-अलग फ़ायरफ़ॉक्स टैब पर लोड होते हैं, केवल एक टैब (केंद्रित टैब) के लिए बीकोज़ की स्थिति AEvent.originalTarget.defaultView.location.href == gBrowser.currentURI.spec का मूल्यांकन वास्तविक –