23

द्वारा बनाई गई पॉपअप विंडो बंद करना मैं एक क्रोम एक्सटेंशन बनाने की कोशिश कर रहा हूं जो स्वादिष्ट बुकमार्कमार्क के लिए एक प्रतिस्थापन है। मुझे पता है कि पहले से ही एक एक्सटेंशन है जो यह करता है, लेकिन उस एक्सटेंशन के साथ समस्या यह है कि जब आप किसी साइट को बुकमार्क करते हैं, तो पॉपअप विंडो खुली रहती है (बुकमार्कलेट का उपयोग करने के विपरीत, जहां पॉपअप फॉर्म सबमिट करने के बाद खुद को बंद कर देता है। मैंने फिर से बनाया विस्तार और एक ही समस्या में पड़ गएGoogle क्रोम एक्सटेंशन

यहाँ मेरी कोड है:।

manifest.json:

{ 
    "name": "Delicious", 
    "version": "1.0", 
    "description": "Bookmark a site on Delicious", 
    "background_page": "background.html", 
    "permissions": [ 
    "tabs" 
    ], 
    "browser_action": { 
    "default_icon": "delicious.png" 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["http://www.delicious.com/save*"], 
     "js": ["contentscript.js"] 
    } 
    ] 
} 

background.html:

<html><script> 
chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.getSelected(null, function(tab) { 
    w = window.open('http://delicious.com/save?url='+ 
      encodeURIComponent(tab.url)+ 
      '&title='+encodeURIComponent(tab.title)+ 
      '&v=5&noui=1&jump=close', 
     'deliciousuiv5', 
     'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550'); 
    }); 
}); 
</script></html> 

contentscript.js:

if (document.URL == 'http://www.delicious.com/save') 
{ 
    alert('closing...'); 
    self.close(); 
    alert('should have closed by now'); 
} 

जब मैं स्वादिष्ट बटन क्लिक करें, पॉपअप ठीक ऊपर आता है और मैं बुकमार्क बचा सकता है लेकिन उसके बाद मैं "सहेजें" क्लिक करें, पॉपअप बंद नहीं करता है। दोनों अलर्ट दिखाई देते हैं, लेकिन self.close() कुछ भी नहीं प्रतीत होता है। जब मैं contentcript.js में यूआरएल चेक को हटाता हूं, तो पॉपअप सामान्य के रूप में आता है, पहली चेतावनी तुरंत आग लगती है, और फिर पॉपअप स्वयं बंद हो जाता है (जैसा कि इसे करना चाहिए)।

यह क्यों काम नहीं करता है? ऐसा लगता है कि क्रोम मुझे self.close() से रोकने से रोक रहा है। क्या स्वादिष्ट कुछ कर रहा है? क्या यह कुछ और है? यदि आप उन्हें चाहते हैं

फ़ाइलें यहां हैं: [लिंक हटा दिया क्योंकि drop.io कारोबार से बाहर चला गया]

+0

खिड़की स्वचालित रूप से मेरे लिए बंद हो जाती है। मैं क्रोम का एक बिल्कुल डिफ़ॉल्ट संस्करण चला रहा हूं अगर इससे कोई फर्क पड़ता है। –

उत्तर

18

window.close() प्रयास करें, लेकिन वह शायद या तो काम नहीं होगा।

जैसा कि आप नियमित विंडो बना रहे हैं (ब्राउज़र क्रिया पॉपअप के बजाए), तो आप इसे पृष्ठभूमि पृष्ठ से chrome.tabs.remove() का उपयोग कर बंद कर सकते हैं। आप पृष्ठभूमि विंडो से इस विंडो का पता लगा सकते हैं। कुछ की तरह:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    if(changeInfo.status == "loading") { 
     if(tab.url == "http://www.delicious.com/save") { 
      chrome.tabs.remove(tabId); 
     } 
    } 
}); 

मुझे यकीन है कि कैसे क्रोम व्यवहार करता बनाई खिड़कियों हालांकि नहीं कर रहा हूँ - टैब या विंडो के रूप में। यदि कोड के ऊपर विंडोज़ के रूप में थोड़ा अलग होगा।

+0

यह पूरी तरह से काम करता है, धन्यवाद। –

+8

window.close() काम करता है। यदि आप किसी अन्य टैब पर अनुरोध भेजने के बाद पॉपअप को बंद करना चाहते हैं तो सुनिश्चित करें कि आप कॉलबैक में पॉपअप बंद कर दें और टैब को कम से कम एक खाली प्रतिक्रिया भेजी जानी चाहिए। –

9

मुझे इस के आसपास एक बहुत ही आसान काम मिला। तुम सिर्फ सही पर चयनित टैब सेट और पॉपअप, गायब हो जाता है इस तरह ...

// remove popup by selecting the tab 
chrome.tabs.getSelected(null, function(tab) { 
    chrome.tabs.update(tab.id, { selected: true }) 
}); 
+1

मेरे लिए काम नहीं करता है। – Nakilon

+4

'chrome.tabs.getSelected' अब अप्रचलित है। –

0

मैं इस समाधान मिल गया है: chrome.tabs.update({ active: true }); कोड का यह एकल लाइन ब्राउज़र क्रिया के पॉप अप विंडो बंद कर देता है। आपको टैब को पास करने की भी आवश्यकता नहीं है। वहीं क्योंकि डिफ़ॉल्ट रूप से यह वर्तमान टैब की आईडी पर सेट है। मैं इसे पृष्ठभूमि पृष्ठ में चलाता हूं लेकिन ऐसा लगता है कि इसे विस्तार में हर जगह चलाया जा सकता है।

+0

दुर्भाग्य से यह मेरे लिए काम नहीं किया। मैं इस पृष्ठ पर पोस्ट किए गए समान getSelected() कोड से अपडेट कर रहा हूं और मैंने यह कोड लिखा है कि यह वास्तव में काम करने की अपेक्षा करता है, दस्तावेज़ों के कहने से। – offthat

+0

यह कई परिस्थितियों पर निर्भर हो सकता है। आप इस विधि का आह्वान कहां रखते हैं? हो सकता है कि कुछ कॉलबैक हैंडलर के अंदर जो नहीं कहा जाता है और ... –

+0

मैंने पॉपअप के संदर्भ को बस संग्रहीत किया, ताकि मैं बस popupRef को कॉल कर सकूं। बंद करें() और यह चाल है। – offthat

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