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

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

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

अनलोड हैंडलर में नेविगेशन की सुविधा बंद करें

बहुत ज़्यादा शब्द हैं, पढ़ा नहीं गया: window.onunload इवेंट हैंडलर में सभी क्रॉस-ऑरिजिन नेविगेशन को अनुमति नहीं दी जाएगी. इससे, Chrome को एचटीएमएल की खास जानकारी के साथ-साथ Firefox और Safari के साथ इनलाइन तरीके से ऑप्टिमाइज़ किया जा सकेगा.

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

Chrome के पिछले वर्शन की मदद से, window.onunload में क्रॉस-ऑरिजिन नेविगेशन को रोका जा सकता है. window.location.href = '#fragment' को सेट करके. एचटीएमएल स्पेसिफ़िकेशन के मुताबिक, अनलोड हैंडलर में सिर्फ़ इन-पेज नेविगेशन की अनुमति है. साथ ही, Chrome के पिछले वर्शन में, नेविगेट करने के अन्य तरीकों को स्पेसिफ़िकेशन के मुताबिक ब्लॉक कर दिया गया था. Chrome 54 से, ऐसे नेविगेशन की अनुमति नहीं होगी, ताकि हम खास जानकारी के साथ-साथ Firefox और Safari को एक साथ ला सकें.

एचटीटीपी/0.9 अब काम नहीं करता

TL;DR: HTTP/0.9 अब काम नहीं करता है. डेवलपर को बाद के वर्शन का इस्तेमाल करना चाहिए, जैसे कि एचटीटीपी/2.

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

एचटीटीपी/1.x का पहले एचटीटीपी/0.9 है. इसमें उसके उत्तराधिकारी की कई विशेषताएं नहीं हैं. आधुनिक वेब के लिए, खास तौर पर चिंता का विषय, रिस्पॉन्स हेडर की कमी है. इनके बिना, यह पुष्टि करने का कोई तरीका नहीं है कि एचटीटीपी/0.9 रिस्पॉन्स वाकई में एक एचटीटीपी/0.9 रिस्पॉन्स है. इससे कई समस्याएं हो सकती हैं. उदाहरणों में अन्य समस्याओं के साथ-साथ ये भी शामिल हैं:

  • ऐसे क्लाइंट जो गड़बड़ी के कुछ खास रिस्पॉन्स को मान्य एचटीटीपी/0.9 रिस्पॉन्स के तौर पर देखते हैं.
  • ऐसे सर्वर जो अनुरोध सॉकेट को बंद नहीं कर पाते, जिससे क्लाइंट के जवाबों को हैंगिंग GET के तौर पर माना जाता है. ये रिस्पॉन्स या तो हमेशा के लिए सेव रहते हैं या उपयोगकर्ता के अनुरोध करने वाले पेज से नेविगेट करने पर ऐसा होता है.
  • ऐसे सर्वर जो ब्राउज़र को यह नहीं बता पाते कि अनुरोध फ़ेल हो गया है. इससे कैश मेमोरी में डेटा सेव करने में समस्या हो सकती है.

एचटीटीपी/0.9 से जुड़ी समस्याओं को ठीक करने का सिर्फ़ एक आसान तरीका यह है कि सहायता को पूरी तरह से हटा दिया जाए. इसलिए, Chrome 54 में एचटीटीपी/0.9 की सुविधा हटा दी गई है.

initTouchEvent के इस्तेमाल पर रोक लगा दी गई है

कम शब्दों में लिखें: initTouchEvent की जगह अब TouchEvent constructor की सुविधा दी जाती है, ताकि निर्देशों को बेहतर बनाया जा सके. इसे Chrome 54 में हटा दिया जाएगा.

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

लंबे समय से डेवलपर initTouchEvent एपीआई का इस्तेमाल करके, Chrome में सिंथेटिक टच इवेंट बना रहे हैं. अक्सर इनका इस्तेमाल टच इवेंट को सिम्युलेट करने के लिए किया जाता है, ताकि आपकी साइट में कुछ यूज़र इंटरफ़ेस (यूआई) की जांच की जा सके या उन्हें ऑटोमेट किया जा सके. Chrome 49 के बाद से, काम नहीं करने वाले इस एपीआई पर यह चेतावनी दिख रही है .

टच इवेंट की चेतावनी
TouchEvent.initTouchEvent के इस्तेमाल पर रोक लगा दी गई है और इसे सितंबर 2016 के आस-पास, M53 वर्शन में हटा दिया जाएगा. इसके बजाय, कृपया TouchEvent कंस्ट्रक्टर का इस्तेमाल करें. ज़्यादा जानकारी के लिए, https://www.chromestatus.com/features/5730982598541312 पर जाएं.

टच इवेंट स्पेसिफ़िकेशन में शामिल न होने के अलावा, यह बदलाव अच्छा होने की कई वजहें हो सकती हैं. Chrome में initTouchEvent को लागू करना, Safari के initTouchEvent API के साथ पूरी तरह से काम नहीं करता. हालांकि, यह Android के Firefox से अलग था. आखिरकार, TouchEvent कंस्ट्रक्टर को इस्तेमाल करना काफ़ी आसान है.

इन वजहों से हमने ऐसे एपीआई को बनाए रखने के बजाय, निर्देशों का पालन करने का फ़ैसला किया है जो न तो खास तौर पर बताया गया है और न ही किसी दूसरे तरीके के साथ काम करता है. जिन डेवलपर को किसी विकल्प की ज़रूरत है उन्हें TouchEvent कंस्ट्रक्टर का इस्तेमाल करना चाहिए.

iOS और Android/Chrome, दोनों में initTouchEvent API को लागू करने का तरीका काफ़ी अलग-अलग है. इसलिए, साइटों पर भी कोड के साथ-साथ कोड भी होता (अक्सर, Firefox को गलती से)

    var event = document.createEvent('TouchEvent');
    
    if(ua === 'Android') {
      event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
        300, 300, 200, 200, false, false, false, false);
    } else {
      event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
        200, false, false, false, false, touches, targetTouches, changedTouches, 0, 0);
    }
    
    document.body.dispatchEvent(touchEvent);

यह ठीक नहीं है, क्योंकि उपयोगकर्ता-एजेंट में "Android" लिखा हुआ है और Android पर Chrome मिल जाएगा और इस सुविधा को बंद कर देगा. इसे अभी हटाया नहीं जा सकता, क्योंकि Android पर कुछ समय के लिए अन्य WebKit और पुराने Blink आधारित ब्राउज़र होंगे इसलिए, आपको अब भी पुराने एपीआई की सुविधा देनी होगी.

वेब पर TouchEvent को सही तरीके से मैनेज करने के लिए, आपको Firefox, IE Edge, और Chrome पर काम करने वाले कोड को बदलना होगा. इसके लिए, window ऑब्जेक्ट में TouchEvent की मौजूदगी की जांच करें. अगर कोड की वैल्यू पॉज़िटिव "लंबाई" है, तो इसका इस्तेमाल करें.

    if('TouchEvent' in window && TouchEvent.length > 0) {
      var touch = new Touch({
        identifier: 42,
        target: document.body,
        clientX: 200,
        clientY: 200,
        screenX: 300,
        screenY: 300,
        pageX: 200,
        pageY: 200,
        radiusX: 5,
        radiusY: 5
      });
    
      event = new TouchEvent("touchstart", {
        cancelable: true,
        bubbles: true,
        touches: [touch],
        targetTouches: [touch],
        changedTouches: [touch]
      });
    }
    else {
      event = document.createEvent('TouchEvent');
    
      if(ua === 'Android') {
        event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
          300, 300, 200, 200, false, false, false, false);
      } else {
        event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
          200, false, false, false, false, touches, targetTouches, 
          changedTouches, 0, 0);
      }
    }
    
    document.body.dispatchEvent(touchEvent);

KeyboardEvent.keyIdentifier एट्रिब्यूट हटाया गया

बहुत कम शब्द: थोड़ी-बहुत काम करने वाली keyboardEvent.keyIdentifier प्रॉपर्टी को स्टैंडर्ड पर आधारित KeyboardEvent.key प्रॉपर्टी के लिए हटाया जा रहा है.

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

साल 2009 और 2010 में, keyboardEvent.keyIdentifier एट्रिब्यूट कुछ समय के लिए W3C स्पेसिफ़िकेशन का हिस्सा था. हालांकि, इसे सिर्फ़ WebKit में लागू किया गया था.

जिन डेवलपर को इस एट्रिब्यूट को बदलना है वे स्टैंडर्ड पर आधारित KeyboardEvent.key प्रॉपर्टी या KeyboardEvent.code प्रॉपर्टी का इस्तेमाल कर सकते हैं. इस बारे में पिछले वसंत में दिए गए लेख में बताया गया है. पहले वाले वर्शन में, इसे लागू करने का आधार सबसे ज़्यादा होता है. यह Safari को छोड़कर सभी मुख्य डेस्कटॉप ब्राउज़र पर काम करता है. बाद में Chrome, Firefox, और Opera पर फ़िलहाल काम करता है. इस सुविधा को हटाने का मकसद, KeyboardEvent.key प्रॉपर्टी का इस्तेमाल करना है. Apple ने इस बारे में कोई जानकारी नहीं दी है कि यह सुविधा काम करेगी या नहीं. हालांकि, बंद (लेकिन Chrome से अभी तक नहीं हटाया गया) KeyboardEvent.keyCode और KeyboardEvent.charCode प्रॉपर्टी अब भी Safari पर उपलब्ध हैं.

MediaStream के खत्म हो चुके इवेंट और एट्रिब्यूट और चालू किए गए एट्रिब्यूट हटाएं

बहुत ज़्यादा शब्द हैं, पढ़ा नहीं गया: ended इवेंट और एट्रिब्यूट, और onended इवेंट हैंडलर को हटाया जा रहा है, क्योंकि उन्हें मीडिया कैप्चर और स्ट्रीम की खास जानकारी से हटा दिया गया है.

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

करीब तीन साल से, न तो ended इवेंट और न ही onended इवेंट हैंडलर, WebRTC की खास जानकारी का हिस्सा हैं. इवेंट देखने के लिए, डेवलपर को MediaStreams के बजाय MediaStreamTracks का इस्तेमाल करना चाहिए.

SVGElement.viewPort को रोकें

इसे लागू करने की सुविधा Chrome में 2012 से काम नहीं कर रही है. यह एट्रिब्यूट किसी दूसरे ब्राउज़र में मौजूद नहीं है और इसे स्पेसिफ़िकेशन से हटा दिया गया है. इन वजहों से प्रॉपर्टी को बंद किया जा रहा है. Chrome 55 में इसे हटाए जाने का अनुमान है.

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

SVGViewElement.viewTarget को रोकें

SVGViewElement.viewTarget एट्रिब्यूट, SVG2.0 की खास बातों का हिस्सा नहीं है और इसका इस्तेमाल कम है या मौजूद नहीं है. यह एट्रिब्यूट Chrome 54 में काम नहीं करता. Chrome 56 से हटाए जाने का अनुमान है.

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

SVGZoomEvent हटाएं

SVGZoomEvent, SVG2.0 की खास बातों का हिस्सा नहीं है और यह Chromium में काम नहीं करता. इसके बावजूद, इस सुविधा का अब भी पता लगाया जा सकता है. इससे डेवलपर भ्रम की स्थिति पैदा कर सकते हैं. इसे हटा दिया जाएगा.

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