2010-02-23 7 views
15

मैं एक पॉपअप और पृष्ठभूमि पृष्ठ के साथ एक Google क्रोम एक्सटेंशन लिख रहा हूँ। पॉपअप कुछ घटनाओं की सदस्यता लेता है जो पृष्ठभूमि उत्पन्न करता है, और जब पॉपअप चला जाता है तो मैं उन घटनाओं से सदस्यता समाप्त करना चाहता हूं। हालांकि, मुझे पॉपअप से उत्पन्न होने वाले ऑनबर्ननलोड या ऑनलोड लोड घटनाओं को नहीं देखा जाता है। क्या इन घटनाओं को निकाल दिया गया है? यदि नहीं, तो पॉपअप को कैप्चर करने के तरीके पर कोई विचार?क्या Google क्रोम एक्सटेंशन में popup.html के लिए ऑनबर्ननलोड ईवेंट ट्रिगर करता है?

+1

मेरे पास यह सटीक प्रश्न है। क्या आपको कभी जवाब मिला? –

उत्तर

1

मेरे पास एक समान समस्या है। मेरे मामले में, मैंने पॉपअप पेज में मौजूद तत्व पर फ़ोकस सेट किया है। तो जब पॉपअप बंद हो जाता है, तो तत्व फोकस खो देता है और मैं धुंधला घटना पकड़ सकता हूं।

+0

यह चाल मेरे लिए काम नहीं करती - वास्तव में आशावादी थी - लेकिन नहीं। –

30

"प्रीनलोड" ब्राउज़र क्रिया पॉपअप के लिए निकाल दिया गया है। मेरा विश्वास करो, मैंने कोशिश की। "अनलोड" को सही ढंग से निकाल दिया जाना चाहिए, इसलिए, इसके लिए सुनो।

असल में, मेरे पास एक समान प्रणाली है, जो आपको addEventListener का उपयोग करके ईवेंट संलग्न करने की अनुमति देती है, और जब अनलोड ईवेंट आग लगती है तो वे स्वचालित रूप से साफ़ हो जाते हैं।

यहां एक छोटी सी युक्ति है: जाहिर है कि आप console.log का उपयोग नहीं कर सकते हैं, क्योंकि जब तक अनलोड ईवेंट आग लगती है, तो यह बहुत देर हो चुकी है। लेकिन, आप यह कर सकते हैं:

var background = chrome.extension.getBackgroundPage(); 

addEventListener("unload", function (event) { 
    background.console.log(event.type); 
}, true); 

उपरोक्त कोड का उपयोग करके आप पृष्ठभूमि पृष्ठ के कंसोल, जो दिखाना चाहिए कि अनलोड घटना को सही ढंग से निकाल दिया जाता है खोल सकते हैं।

+0

पृष्ठभूमि कंसोल टिप के लिए धन्यवाद! बहुत उपयोगी! –

+0

@AlexStack मैंने आपके संपादन को वापस कर दिया। 'chrome.runtime.getBackgroundPage' बराबर नहीं है - यह असीमित है। – Xan

+0

कम से कम किसी ईवेंट पेज के साथ और कुछ लॉग इन करने के लिए पृष्ठभूमि पृष्ठ पर कॉल करने के लिए 'chrome.runtime.getBackgroundPage()' का उपयोग करके, मुझे यह काम 'अनलोड' ईवेंट के लिए नहीं दिखता है। – jdunning

0

यदि आपने अपने एक्सटेंशन में पृष्ठभूमि पृष्ठों की बजाय event pages का उपयोग करने के लिए स्विच किया है, तो उस तक पहुंच प्राप्त करने का अनुशंसित तरीका chrome.runtime.getBackgroundPage() पर एक फ़ंक्शन के साथ कॉल कर रहा है जिसे पृष्ठभूमि पृष्ठ संदर्भ के साथ वापस बुलाया जाता है।

हालांकि, अगर आप इस तरह की एक onbeforeunload हैंडलर में पृष्ठभूमि पृष्ठ प्राप्त करने के लिए, कोशिश:

document.addEventListener("beforeunload", function() { 
    chrome.runtime.getBackgroundPage(function(backgroundPage) { 
     backgroundPage.log("unloading"); 
    }); 
}); 

कॉलबैक ताकि log() फोन किया कभी नहीं से पहले पेज अनलोड आग, नहीं लगता है।

उपरोक्त एक टिप्पणी में, पून ने पृष्ठ प्राप्त करने के लिए chrome.extension.getBackgroundPage() का उपयोग करने का सुझाव दिया। काम करने के लिए मैं इसे प्राप्त करने का एकमात्र तरीका addEventListener() के साथ हैंडलर बनाना नहीं था। इसके बजाय मैं पुराने स्कूल जाने के लिए और window पर सीधे हैंडलर स्थापित करने के लिए किया था:

window.onbeforeunload = function() { 
    chrome.extension.getBackgroundPage().log("unloading"); 
}; 

कि अंत में पृष्ठभूमि पृष्ठ के माध्यम से मिला है।

संबंधित मुद्दे