साधारण जावास्क्रिप्ट विंडोज़ विली-निली को बंद नहीं कर सकती है। यह एक सुरक्षा सुविधा है, जो कुछ समय पहले शुरू की गई थी, ताकि विभिन्न दुर्भावनापूर्ण शोषण और झुंझलाहट को रोका जा सके।
के लिए नवीनतम कार्यशील युक्ति सेwindow.close()
:
close()
खिड़की पर विधि चाहिए वस्तुओं, सभी निम्न शर्तों को पूरा कर रहे हैं, करीब ब्राउज़िंग संदर्भ एक :
- इसी ब्राउज़िंग संदर्भ एक है पटकथा closable ।
- अवलंबी स्क्रिप्ट का ब्राउज़िंग संदर्भ ब्राउज़िंग संदर्भ A से परिचित है ।
- अवलंबी स्क्रिप्ट के ब्राउज़िंग संदर्भ को ब्राउज़िंग संदर्भ ए को नेविगेट करने की अनुमति है ।
एक ब्राउज़िंग संदर्भ स्क्रिप्ट-क्लोजेबल है यदि यह एक सहायक ब्राउज़िंग संदर्भ है जो एक स्क्रिप्ट द्वारा बनाया गया था (जैसा कि उपयोगकर्ता की कार्रवाई द्वारा विरोध किया जाता है), या यदि यह एक ब्राउज़िंग संदर्भ है जिसके सत्र इतिहास में केवल एक दस्तावेज़ है।
इसका मतलब है, एक छोटे अपवाद के साथ, जावास्क्रिप्ट को उस विंडो को बंद करने की अनुमति नहीं होनी चाहिए जो उसी जावास्क्रिप्ट द्वारा नहीं खोली गई थी।
Chrome उस अपवाद को अनुमति देता है - जो यह उपयोगकर्ताओं के लिए लागू नहीं होता है - हालाँकि फ़ायरफ़ॉक्स नहीं करता है। फ़ायरफ़ॉक्स कार्यान्वयन फ्लैट आउट स्टेट्स :
इस पद्धति को केवल उन विंडो के लिए कॉल करने की अनुमति है जो window.open
विधि का उपयोग करके एक स्क्रिप्ट द्वारा खोली गई थीं ।
यदि आप window.close
Greasemonkey / Tampermonkey / usercript से प्राप्त करने का प्रयास करेंगे तो आपको:
फ़ायरफ़ॉक्स: त्रुटि संदेश, " Scripts may not close windows that were not opened by script.
"
क्रोम: बस चुपचाप विफल हो जाता है।
दीर्घकालिक समाधान:
इससे निपटने का सबसे अच्छा तरीका क्रोम एक्सटेंशन और / या फ़ायरफ़ॉक्स ऐड-ऑन के बजाय बनाना है। ये मज़बूती से वर्तमान विंडो को बंद कर सकते हैं।
हालाँकि, सुरक्षा जोखिम के बाद से window.close
, एक ग्रीसेमोनकी / टैम्परमॉन्की स्क्रिप्ट के लिए बहुत कम हैं; Greasemonkey और Tampermonkey अपने एपीआई में अनिवार्य रूप से यह कार्यक्षमता प्रदान कर सकते हैं (अनिवार्य रूप से आपके लिए विस्तार कार्य की पैकेजिंग)।
फ़ीचर अनुरोध करने पर विचार करें।
हैकी वर्कआर्डो:
वर्तमान में क्रोम "आत्म पुनर्निर्देशन" के शोषण के प्रति संवेदनशील था। इसलिए इस तरह का कोड सामान्य रूप से काम करता था:
open(location, '_self').close();
यह छोटी गाड़ी वाला व्यवहार है, IMO, और अब (लगभग अप्रैल 2015 के अनुसार) ज्यादातर अवरुद्ध है। यह अभी भी इंजेक्टेड कोड से ही काम करेगा जब टैब को नए सिरे से खोला जाएगा और ब्राउजिंग हिस्ट्री में कोई पेज नहीं होगा। तो यह केवल परिस्थितियों के एक बहुत छोटे सेट में उपयोगी है।
हालाँकि, अभी भी एक भिन्नता क्रोम (v43 और v44) प्लस टैम्परमोंकी (v3.11 या बाद के संस्करण) पर काम करती है । एक स्पष्ट @grant
और सादे का उपयोग करें window.close()
। ईजी:
// ==UserScript==
// @name window.close demo
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant GM_addStyle
// ==/UserScript==
setTimeout (window.close, 5000);
अपडेट के लिए zanetu का धन्यवाद । ध्यान दें कि यह केवल एक टैब खुला होने पर काम नहीं करेगा। यह केवल अतिरिक्त टैब बंद करता है।
फ़ायरफ़ॉक्स उस शोषण के खिलाफ सुरक्षित है। तो, एकमात्र जावास्क्रिप्ट तरीका सुरक्षा सेटिंग्स को अपंग करना है, एक समय में एक ब्राउज़र।
आप खोल सकते हैं about:config
और सेट
allow_scripts_to_close_windows
करने के लिए true
।
यदि आपकी स्क्रिप्ट व्यक्तिगत उपयोग के लिए है, तो आगे बढ़ें और ऐसा करें। यदि आप किसी और को उस सेटिंग को चालू करने के लिए कहते हैं, तो वे पूर्वाग्रह से मुक्त होने के लिए स्मार्ट और उचित होंगे।
वर्तमान में Chrome के लिए कोई समतुल्य सेटिंग नहीं है।
window.close()
क्रोम में मेरे लिए काम करता है।