2010-08-02 13 views
14

मैं Google क्रोम के लिए एक एक्सटेंशन विकसित कर रहा हूं। मेरी पृष्ठभूमि स्क्रिप्ट, हर बार, एक सर्वर पर अधिकृत होती है जो XMPP API का उपयोग करती है, और PubSub नोड के लिए सदस्यता लेती है। मुझे बाहर निकलने पर सदस्यता समाप्त करने की आवश्यकता है, अन्यथा डमी सदस्यता सर्वर पर रहेगी। क्या Google क्रोम एक्सटेंशन API में कोई onBrowserClose ईवेंट है?इवेंट ऑन ब्रॉउज़र Google क्रोम एक्सटेंशन के लिए बंद करें?

+1

ध्यान रखें कि ब्राउजर के बाहर निकलने के लिए अन्य तरीके हैं, जिनमें पावरऑफ और क्रैश भी शामिल हैं। यहां तक ​​कि यदि सामान्य रूप से बाहर निकलने वाले ब्राउज़र की जांच करने के लिए 100% विश्वसनीय तरीका है, तो भी आपके पास छेद होगा। –

उत्तर

9

क्रोम एक्सटेंशन API में ऐसी कोई घटना नहीं है।

वहाँ हालांकि एक chrome.windows.onRemoved घटना है कि हर बार एक खिड़की बंद कर देता सक्रिय करता है। मैंने सोचा कि अगर आप अंतिम विंडो बंद कर देते हैं तो आप इस घटना में जांच सकते हैं, लेकिन दुर्भाग्य से क्रोम की असीमित प्रकृति के कारण यह काम नहीं करता है।

क्या मैं onRemoved ईवेंट हैंडलर में एक साधारण AJAX अनुरोध चल रहा था की कोशिश की। एजेक्स अनुरोध सर्वर पर कभी नहीं मिला, क्योंकि क्रोम घटना को चलाने से पहले ही बंद कर चुका था (या सिर्फ इसे नजरअंदाज कर दिया था)।

अंतिम उत्तर बनाना: नहीं, वर्तमान में आप नहीं कर सकते हैं, जहां तक ​​मुझे पता है। अपडेट पर ध्यान देने के लिए आप निम्नलिखित बग रिपोर्ट को http://crbug.com/30885 पर तारांकित करना चाहेंगे।

+0

प्रतिक्रिया के लिए धन्यवाद, वास्तव में मैंने पुराने स्कूल के रास्ते में जाने का फैसला किया, बस स्थानीय स्टोरेज में पिछली सब्स्क्राइबेशन जानकारी को सहेजें और बैकग्राउंड स्क्रिप्ट को फिर से लोड करते समय सदस्यता रद्द करें =) – simple

0

एक ब्राउज़र पास घटना जोड़ा जा रहा है एक बहुत लगातार अनुरोध है। अपडेट के लिए स्टार http://crbug.com/30885। और जब एक कुंजी प्रेस के माध्यम से ब्राउज़र बंद हो जाता है तो यह पता लगाने के लिए एक चालाक हैक के लिए बग रिपोर्ट पढ़ें।

4

आप मामले को पकड़ने जब खुले टैब की संख्या 0 है, तो आप उस का इलाज कर सकते एक क्रोम OnClose घटना के रूप में। मेरे मामले में, क्रोम बंद होने से पहले मुझे डेस्कटॉप अधिसूचना रद्द करना होगा क्योंकि यह अन्यथा दुर्घटनाग्रस्त हो रहा था। इस तरह मैंने किया:

1. निम्नलिखित का उपयोग करके एक चर NUM_TABS प्रारंभ:
chrome.tabs.getAllInWindow(null, function(tabs){ 
    console.log("Initial tab count: " + tabs.length); 
    num_tabs = tabs.length; 
}); 
2. वृद्धि NUM_TABS जब एक टैब बनाई गई है:
chrome.tabs.onCreated.addListener(function(tab){ 
    num_tabs++; 
    console.log("Tab created event caught. Open tabs #: " + num_tabs); 
}); 
3. घटते क्रम में num_tabs जब कोई टैब हटा दिया जाता है और आपके ब्राउज़र को ईवेंट हैंडलर पर रोकता है तो num_tabs = 0
chrome.tabs.onRemoved.addListener(function(tabId){ 
    num_tabs--; 
    console.log("Tab removed event caught. Open tabs #: " + num_tabs); 
    if(num_tabs == 0) 
     notification.cancel(); 
}); 
+0

क्या यह काम क्रोम की एसिंक प्रकृति को भी देता है, क्योंकि कोडिंगबग का जवाब कहता है? –

+0

यदि आपके ब्राउज़र में कोई एक्सटेंशन है, जिसके पास "पृष्ठभूमि" की अनुमति है, तो इसे देखें -> https://developer.chrome.com/extensions/declare_permissions, क्रोम तब भी बाहर नहीं निकलेगा जब आप सोचते हैं। आपको प्रक्रिया को स्पष्ट रूप से समाप्त करना होगा या छोड़ना या कुछ बल देना होगा। – ankitG

3

यह एक मेरे लिए काम करता है:

chrome.windows.onRemoved.addListener(function(windowId){ 
    alert("!! Exiting the Browser !!"); 
}); 

यह chrome.windows बजाय chrome.tabs लेता है।

+2

आपके पास एकाधिक क्रोम विंडो हो सकती हैं और यह हर बार बंद हो जाती है, न कि आखिरी विंडो बंद होने पर। – s3m3n

1

टीएल; डीआर:window.onunload घटना का प्रयास करें, यह कुछ मामलों के लिए काम करता है।

यह उल्लेख किया गया था इससे पहले कि हम आम तौर पर onBrowserClose घटना की तरह कुछ संभाल सकते हैं और बंद करने से ब्राउज़र को रोकने के रूप में। लेकिन कुछ मामलों के लिए हम कुछ तुल्यकालिक करने के लिए window.onunload घटना का उपयोग कर सकते हैं, और यह काम करता है, तो यह वास्तव में तुल्यकालिक

मेरे अनुभव से आप कम से कम कर सकते हैं:

  • एचटीएमएल 5 localStorage (जो तुल्यकालिक है) में (उदाहरण के लिए लॉग) में कुछ जानकारी की बचत करें।
  • कुछ असीमित क्रोम एक्सटेंशन API फ़ंक्शन पर कॉल करें लेकिन आपको परिणाम नहीं मिल सकता है। (यह मेरे लिए काम करता है! हाँ!)
  • प्रदर्शन सिंक्रोनस XMLHTTPRequest (हाँ, कभी-कभी यह काम करता है)।
संबंधित मुद्दे