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

पॉल किनलन
पॉल किनलन
जो मेडले
जो मेडली

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

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

असुरक्षित कॉन्टेक्स्ट पर App{8/} का इस्तेमाल बंद कर दिया गया है

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

हटाएं | Chromestatus Tracker | Chromium की गड़बड़ी

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

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

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

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

हटाएं | Chromestatus Tracker | CRBug की समस्या

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

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

इस GitHub समस्या में इसकी वजह बताने के लिए, आप और चर्चा पढ़ सकते हैं.

बहुत ज़्यादा शब्द हैं, पढ़ा नहीं गया: HTMLLinkElement के rel एट्रिब्यूट के लिए, subresource वैल्यू के इस्तेमाल को हटाएं.

हटाएं | Chromestatus Tracker | Chromium की गड़बड़ी

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

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

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

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

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

हटाएं | Chromestatus Tracker | Chromium की गड़बड़ी

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

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

KeyboardEvent.prototype.keyLocation हटाएं

TL;DR: Keyboard.prototype.location एट्रिब्यूट के लिए ग़ैर-ज़रूरी उपनाम हटाएं.

हटाएं | Chromestatus Tracker | Chromium की गड़बड़ी

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

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

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

हटाएं | Chromestatus Tracker | 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 अब काम नहीं करता

बहुत ज़्यादा शब्द हैं, पढ़ा नहीं गया: position और totalSize एट्रिब्यूट के साथ, XMLHttpRequestProgressEvent इंटरफ़ेस को हटा दिया जाएगा.

हटाएं | Chromestatus Tracker | 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 Tracker | Chromium की गड़बड़ी

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

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

SVGElement.offset प्रॉपर्टी का इस्तेमाल नहीं किया जा सकता

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

हटाएं | Chromestatus Tracker | Chromium की गड़बड़ी

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

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