Chrome 50 में API को बंद करना और हटाना

Chrome के हर वर्शन में, हमें प्रॉडक्ट, उसकी परफ़ॉर्मेंस, और वेब प्लैटफ़ॉर्म की सुविधाओं में काफ़ी अपडेट और सुधार दिखते हैं.

Chrome 50 (बीटा वर्शन के रिलीज़ होने की अनुमानित तारीख: 10 से 17 मार्च) में, Chrome में कई बदलाव किए गए हैं. इस सूची में कभी भी बदलाव किया जा सकता है.

असुरक्षित कॉन्टेक्स्ट पर, AppCache का इस्तेमाल नहीं किया जा सकता

खास जानकारी: क्रॉस-साइट स्क्रिप्टिंग को रोकने के लिए, हम असुरक्षित ऑरिजिन पर AppCache का इस्तेमाल बंद कर रहे हैं. हमें उम्मीद है कि Chrome 52 में यह सुविधा सिर्फ़ उन ऑरिजिन पर काम करेगी जो एचटीटीपीएस पर कॉन्टेंट दिखाते हैं.

हटाने का इंटेंट | Chromestatus ट्रैकर | Chromium में मौजूद गड़बड़ी

AppCache एक ऐसी सुविधा है जो किसी ऑरिजिन को ऑफ़लाइन और लगातार ऐक्सेस करने की अनुमति देती है. यह क्रॉस-साइट स्क्रिप्टिंग हमले के लिए, प्रिविलेज एस्कलेशन का एक बेहतरीन तरीका है. असुरक्षित ऑरिजिन से बेहतर सुविधाओं को हटाने के बड़े प्रयास के तहत.

Chrome, इस अटैक वेक्टर को सिर्फ़ एचटीटीपीएस पर अनुमति देकर हटा रहा है. हम Chrome 50 में एचटीटीपी के साथ काम करने की सुविधा को बंद कर रहे हैं. साथ ही, Chrome 52 में इसे पूरी तरह से हटा देंगे.

Document.defaultCharset को हटा दिया गया है

बहुत ज़्यादा शब्द हैं, पढ़ा नहीं गया: स्पेसिफ़िकेशन का पालन बेहतर बनाने के लिए, document.defaultCharset को हटा दिया गया है.

हटाने का इंटेंट | Chromestatus ट्रैकर | CRBug से जुड़ी समस्या

document.defaultCharset, Chrome 49 में बंद कर दी गई है. यह सिर्फ़ पढ़ने के लिए उपलब्ध प्रॉपर्टी है. यह उपयोगकर्ता की क्षेत्रीय सेटिंग के आधार पर, उनके सिस्टम की डिफ़ॉल्ट वर्ण एन्कोडिंग दिखाती है. ब्राउज़र, एचटीटीपी रिस्पॉन्स या पेज में एम्बेड किए गए मेटा टैग में, वर्ण कोड में बदलने की जानकारी का इस्तेमाल इस तरह करते हैं कि इस वैल्यू को बनाए रखना फ़ायदेमंद नहीं है.

इसके बजाय, एचटीटीपी हेडर में बताई गई पहली वैल्यू पाने के लिए, document.characterSet का इस्तेमाल करें. अगर यह मौजूद नहीं है, तो आपको <meta> एलिमेंट के charset एट्रिब्यूट में बताई गई वैल्यू मिलेगी. उदाहरण के लिए, <meta charset="utf-8">. आखिर में, अगर इनमें से कोई भी उपलब्ध नहीं है, तो document.characterSet उपयोगकर्ता की सिस्टम सेटिंग होगी.

इस बारे में ज़्यादा जानने के लिए, इस GitHub समस्या पर जाएं

खास जानकारी: HTMLLinkElement के rel एट्रिब्यूट के लिए, subresource वैल्यू का इस्तेमाल करने की सुविधा हटाएं.

हटाने का इंटेंट | Chromestatus ट्रैकर | Chromium में मौजूद गड़बड़ी

<link> पर subresource एट्रिब्यूट का मकसद, ब्राउज़र के इंतज़ार के समय में किसी संसाधन को पहले से लोड करना था. जब कोई ब्राउज़र किसी पेज को डाउनलोड कर लेता है, तो वह दूसरे पेजों जैसे रिसॉर्स को पहले से डाउनलोड कर सकता है. इससे, जब उपयोगकर्ताओं के उन पेजों का अनुरोध किया जाता है, तो उन्हें ब्राउज़र की कैश मेमोरी से आसानी से वापस लाया जा सकता है.

subresource एट्रिब्यूट में कई समस्याएं हैं. सबसे पहले, यह कभी भी उम्मीद के मुताबिक काम नहीं करता था. रेफ़र किए गए रिसॉर्स को कम प्राथमिकता के साथ डाउनलोड किया गया था. इस एट्रिब्यूट को Chrome के अलावा, किसी भी ब्राउज़र पर कभी लागू नहीं किया गया था. Chrome में इस सुविधा को लागू करने के दौरान एक गड़बड़ी हुई थी. इसकी वजह से, संसाधन दो बार डाउनलोड हो गए थे.

कॉन्टेंट को पहले से लोड करके, उपयोगकर्ता अनुभव को बेहतर बनाने के लिए, डेवलपर के पास कई विकल्प होते हैं. इनमें से सबसे ज़्यादा पसंद किया जाने वाला विकल्प, सेवा वर्कर्स बनाना है. इससे, पहले से कैश मेमोरी में कॉन्टेंट सेव करने और Caches API का फ़ायदा लिया जा सकता है. अन्य समाधानों में, rel एट्रिब्यूट की अन्य वैल्यू शामिल हैं. इनमें preconnect, prefetch, preload, prerender शामिल हैं. इनमें से कुछ विकल्प, प्रयोग के तौर पर उपलब्ध हैं. इसलिए, हो सकता है कि ये सभी के लिए उपलब्ध न हों.

असुरक्षित TLS वर्शन का फ़ॉलबैक हटाना

TL;DR: TLS के कम सुरक्षित या असुरक्षित वर्शन का इस्तेमाल करके, सर्वर को डेटा दिखाने के लिए मजबूर करने वाले तरीके को हटाएं.

हटाने का इंटेंट | Chromestatus ट्रैकर | Chromium में मौजूद गड़बड़ी

ट्रांसपोर्ट लेयर सिक्योरिटी (TLS), वर्शन के लिए बातचीत करने के तरीके के साथ काम करती है. इससे, TLS के नए वर्शन को बिना किसी रुकावट के इस्तेमाल किया जा सकता है. कुछ सर्वर ने इसे इस तरह से लागू किया कि ब्राउज़र को फ़ॉलबैक के तौर पर असुरक्षित एंडपॉइंट का इस्तेमाल करना पड़ा. इस वजह से, हमलावर किसी भी वेबसाइट को, TLS के कम सुरक्षित वर्शन के लिए नेगोशिएट करने के लिए मजबूर कर सकते हैं. ऐसा सिर्फ़ उन वेबसाइटों के लिए नहीं किया जा सकता जिन्हें गलत तरीके से कॉन्फ़िगर किया गया है.

जिन साइटों पर असर पड़ा है वे ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION से कनेक्ट नहीं हो पाएंगी. एडमिन को यह पक्का करना चाहिए कि उनके सर्वर का सॉफ़्टवेयर अप-टू-डेट हो. अगर समस्या अब भी हल नहीं होती है, तो सर्वर के सॉफ़्टवेयर वेंडर से संपर्क करें और देखें कि क्या कोई समाधान उपलब्ध है.

KeyboardEvent.prototype.keyLocation को हटाना

बहुत ज़्यादा शब्द हैं, पढ़ा नहीं गया: Keyboard.prototype.location एट्रिब्यूट के लिए, ग़ैर-ज़रूरी उपनाम हटाएं.

हटाने का इंटेंट | Chromestatus ट्रैकर | Chromium में मौजूद गड़बड़ी

यह एट्रिब्यूट, Keyboard.prototype.location एट्रिब्यूट का दूसरा नाम है. इससे, कीबोर्ड पर एक से ज़्यादा जगहों पर मौजूद बटनों के बीच अंतर करने में मदद मिलती है. उदाहरण के लिए, इन दोनों एट्रिब्यूट की मदद से डेवलपर, एक्सटेंडेड कीबोर्ड पर मौजूद दो Enter बटन के बीच अंतर कर सकते हैं.

RTCPeerConnection के तरीकों में गड़बड़ी और सफलता के हैंडलर ज़रूरी हैं

खास जानकारी: WebRTC के RTCPeerConnection के तरीकों createOffer() और createAnswer() के लिए, अब गड़बड़ी वाले हैंडलर के साथ-साथ सफलता वाले हैंडलर की भी ज़रूरत होती है. पहले, सिर्फ़ एक सफलता हैंडलर के साथ इन तरीकों को कॉल किया जा सकता था. इस तरह के इस्तेमाल को बंद कर दिया गया है.

हटाने का इंटेंट | Chromestatus ट्रैकर | Chromium में मौजूद गड़बड़ी

Chrome 49 में, हमने एक चेतावनी जोड़ी है. यह चेतावनी तब दिखती है, जब गड़बड़ी ठीक करने वाले फ़ंक्शन को दिए बिना, setLocalDescription() या setRemoteDescription() को कॉल किया जाता है. Chrome 50 के बाद, गड़बड़ी को हैंडल करने वाला आर्ग्युमेंट देना ज़रूरी है.

यह इन तरीकों पर वादे करने के लिए, WebRTC स्पेसिफ़िकेशन के मुताबिक, इन तरीकों को इस्तेमाल करने की अनुमति देने का एक हिस्सा है.

यहां WebRTC के RTCPeerConnection डेमो (main.js, लाइन 126) का उदाहरण दिया गया है:

    function onCreateOfferSuccess(desc) {
      pc1.setLocalDescription(desc, function() {
         onSetLocalSuccess(pc1);
      }, onSetSessionDescriptionError);
      pc2.setRemoteDescription(desc, function() {
        onSetRemoteSuccess(pc2);
      }, onSetSessionDescriptionError);
      pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
    }

ध्यान दें कि setLocalDescription() और setRemoteDescription(), दोनों में गड़बड़ी ठीक करने वाला फ़ंक्शन है. पुराने ब्राउज़र सिर्फ़ सफलता हैंडलर की उम्मीद करते हैं. अगर गड़बड़ी हैंडलर मौजूद है, तो वे उसे अनदेखा कर देंगे. पुराने ब्राउज़र में इस कोड को कॉल करने से कोई अपवाद नहीं होगा.

आम तौर पर, हमारा सुझाव है कि प्रोडक्शन के लिए बने WebRTC ऐप्लिकेशन के लिए, adapter.js का इस्तेमाल करें. यह एक शिम है, जिसे WebRTC प्रोजेक्ट मैनेज करता है. इससे ऐप्लिकेशन को स्पेसिफ़िकेशन में हुए बदलावों और प्रीफ़िक्स के अंतर से बचाया जा सकता है.

XMLHttpRequestProgressEvent अब काम नहीं करता

खास जानकारी: XMLHttpRequestProgressEvent इंटरफ़ेस को हटा दिया जाएगा. साथ ही, position और totalSize एट्रिब्यूट भी हटा दिए जाएंगे.

हटाने का इंटेंट | Chromestatus ट्रैकर | Chromium में मौजूद गड़बड़ी

यह इवेंट, Gecko की कम्पैटबिलिटी प्रॉपर्टी position और totalSize के साथ काम करने के लिए था. Mozilla 22 में इन तीनों के लिए सहायता उपलब्ध नहीं है. साथ ही, इनकी जगह ProgressEvent ने ले ली है.

     var progressBar = document.getElementById("p"),
          client = new XMLHttpRequest()
      client.open("GET", "magical-unicorns")
      client.onprogress = function(pe) {
        if(pe.lengthComputable) {
          progressBar.max = pe.total
          progressBar.value = pe.loaded
        }
      }

प्रीफ़िक्स वाले एन्क्रिप्ट (सुरक्षित) किए गए मीडिया एक्सटेंशन हटाना

खास जानकारी: प्रीफ़िक्स वाले एन्क्रिप्ट किए गए मीडिया एक्सटेंशन हटा दिए गए हैं. अब इनकी जगह, स्पेसिफ़िकेशन के हिसाब से बनाए गए बिना प्रीफ़िक्स वाले एक्सटेंशन इस्तेमाल किए जाएंगे.

हटाने का इंटेंट | Chromestatus ट्रैकर | Chromium में मौजूद गड़बड़ी

हमने Chrome 42 में, एन्क्रिप्ट किए गए मीडिया एक्सटेंशन का स्पेसिफ़िकेशन पर आधारित, बिना प्रीफ़िक्स वाला वर्शन उपलब्ध कराया है. इस एपीआई का इस्तेमाल, HTMLMediaElement के साथ इस्तेमाल करने के लिए, डिजिटल राइट मैनेजमेंट सिस्टम को खोजने, चुनने, और उनसे इंटरैक्ट करने के लिए किया जाता है.

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

SVGElement.offset प्रॉपर्टी के लिए सहायता हटाना

ज़्यादा जानकारी: HTMLElement पर, ज़्यादातर प्रॉपर्टी के साथ काम करने के लिए, SVGElement के लिए ऑफ़सेट प्रॉपर्टी हटा दी गई हैं.

हटाने का इंटेंट | Chromestatus ट्रैकर | Chromium में मौजूद गड़बड़ी

ऑफ़सेट प्रॉपर्टी का इस्तेमाल, HTMLElement और SVGElement, दोनों पर लंबे समय से किया जा रहा है. हालांकि, Gecko और Edge में इनका इस्तेमाल सिर्फ़ HTMLElement पर किया जा सकता है. ब्राउज़र के बीच एक जैसी परफ़ॉर्मेंस देने के लिए, इन प्रॉपर्टी को Chrome 48 में बंद कर दिया गया था. अब इन्हें हटाया जा रहा है.

मिलती-जुलती प्रॉपर्टी, HTMLElement का हिस्सा हैं. हालांकि, डेवलपर के पास इसके विकल्प के तौर पर, getBoundingClientRect() का इस्तेमाल करने का विकल्प भी है