JavaScript डायलॉग पर Chromium नीति

JavaScript डायलॉग का इतिहास

JavaScript की शुरुआत 1995 में हुई थी. JavaScript के पहले वर्शन में, alert(), confirm(), और prompt() नाम के विंडो ऑब्जेक्ट के लिए तरीके इस्तेमाल किए गए थे.

हालांकि, ये उस समय के JavaScript में फ़िट हो जाते हैं, लेकिन उनका सिंक्रोनस एपीआई, मॉडर्न ब्राउज़र के लिए समस्याओं से भरा है. JavaScript इंजन को उपयोगकर्ता का जवाब मिलने तक रुकना होता है, इसलिए JavaScript डायलॉग ऐप-मोडल होते हैं. डायलॉग ऐप्लिकेशन-मोडल होते हैं. इसलिए, आम तौर पर इनका इस्तेमाल हमारे उपयोगकर्ताओं को नुकसान पहुंचाने के लिए किया जाता है.

इस वजह से, Chromium की टीम आपको JavaScript डायलॉग इस्तेमाल न करने का सुझाव देती है.

विकल्प

डायलॉग बॉक्स को बदलने के कई विकल्प हैं.

alert()/confirm()/prompt() के लिए कई विकल्प मौजूद हैं. उपयोगकर्ता को इवेंट के बारे में सूचना देने के लिए (जैसे कि कैलेंडर बनाने वाली साइटें), Notifications API का इस्तेमाल किया जाना चाहिए. लोगों का इनपुट पाने के लिए, एचटीएमएल <dialog> एलिमेंट का इस्तेमाल करना चाहिए. XSS के कॉन्सेप्ट के सबूत के लिए, devtool का console.log(document.origin) इस्तेमाल किया जा सकता है.

onbeforeunload के मामले में, इस बात पर ध्यान दें कि यह पहले से ही भरोसेमंद नहीं है. जैसा कि इल्या ग्रिगोरिक ने बताया है, “मोबाइल प्लैटफ़ॉर्म पर फ़ायर करने के लिए आप pagehide, beforeunload, और unload इवेंट पर भरोसा नहीं कर सकते.” अगर आपको स्टेट सेव करना है, तो आपको Page visible API का इस्तेमाल करना चाहिए.

बदलाव

पेज पर onbeforeunload स्ट्रिंग को बताने की सुविधा को Chrome 51 से हटा दिया गया था. (इसे Safari 9.1 से शुरू होने वाले Safari और Firefox 4 से भी हटाया गया था.)

alert()/confirm()/prompt() के डायलॉग बॉक्स को ऐप्लिकेशन-मोडल से बदलकर, टैब स्विच करने पर खारिज कर दिया जाएगा. यह बदलाव सभी चैनलों में मई 2017 की शुरुआत में किया गया.

beforeunload डायलॉग बॉक्स को पेज पर उपयोगकर्ता के जेस्चर (हाव-भाव) की ज़रूरत होती है, ताकि वे Chrome 60 से काम कर सकें. (इससे beforeunload इवेंट की डिस्पैचिंग में कोई बदलाव नहीं होता.) यह Chromium के साथ Chromium को Firefox के साथ अलाइन करता है, जिसने Firefox 44 के साथ यह बदलाव किया है.

फ़ुलस्क्रीन मोड में होने पर alert()/confirm()/prompt() डायलॉग दिखाने से, Chrome 61 से फ़ुल स्क्रीन मोड बंद हो जाएगा.

prompt() डायलॉग अपना टैब चालू नहीं करते हैं. अगर prompt() को बैकग्राउंड टैब से कॉल किया जाता है, तो कॉल तुरंत वापस आ जाता है और कोई डायलॉग नहीं दिखाया जाता है. यह बदलाव मई 2017 की शुरुआत में सभी चैनलों पर किया गया.

alert() डायलॉग अपना टैब चालू नहीं करते हैं. अगर alert() को बैकग्राउंड टैब से कॉल किया जाता है, तो कॉल तुरंत आ जाता है. टैब पर इंंडिकेटर का निशान होता है और टैब पर स्विच करने से पहले, उपयोगकर्ता को यह डायलॉग दिखेगा. इस बदलाव को Chrome 64 से बाद में देखा गया है.

confirm() डायलॉग अपना टैब चालू नहीं करते हैं. अगर confirm() को बैकग्राउंड टैब से कॉल किया जाता है, तो कॉल तुरंत वापस आ जाता है और कोई डायलॉग नहीं दिखाया जाता है. इस बदलाव को Chrome 69 से पहले देखा गया है.

इन बदलावों की वजह से, अगर आपकी साइट डायलॉग का इस्तेमाल करती है, तो हमारा सुझाव है कि आप ऊपर बताए गए विकल्पों का इस्तेमाल करें. इससे आप पर कोई असर नहीं पड़ेगा.