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 से जुड़ी समस्या

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

इसके बजाय, एचटीटीपी हेडर में बताई गई पहली वैल्यू पाने के लिए, 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 के कम सुरक्षित वर्शन के लिए नेगोशिएट करने के लिए मजबूर कर सकते हैं. ऐसा सिर्फ़ उन वेबसाइटों के लिए नहीं किया जा सकता जिन्हें गलत तरीके से कॉन्फ़िगर किया गया है.

जिन साइटों पर असर पड़ा है वे 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 प्रोजेक्ट मैनेज करता है. इससे ऐप्लिकेशन को खास विशेषताओं और प्रीफ़िक्स के अंतर से बचाने में मदद मिलती है.

XMLHttpRequestProग्रेसEvent अब काम नहीं करता

खास जानकारी: 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 प्रॉपर्टी के लिए सहायता सुविधा हटाएं

TL;DR: SVGElement के लिए ऑफ़सेट प्रॉपर्टी को HTMLElement पर ज़्यादा ज़्यादा काम करने वाली प्रॉपर्टी के पक्ष में छोड़ दिया गया है.

हटाने का इंटेंट | Chromestatus ट्रैकर | Chromium बग

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

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