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

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

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

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

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

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

एचटीटीपी/0.9 अब सेवा में नहीं है

संक्षेप में: HTTP/0.9 का अब इस्तेमाल नहीं किया जा सकता. डेवलपर को बाद के वर्शन पर माइग्रेट करना चाहिए. हमारा सुझाव है कि वे एचटीटीपी/2 पर माइग्रेट करें.

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

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

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

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

initTouchEvent का इस्तेमाल हटा दिया गया है

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

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

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

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

टच इवेंट की खास बातों में शामिल न होने के अलावा, इस बदलाव के फ़ायदे भी हैं. Chrome में लागू किया गया initTouchEvent, Safari के initTouchEvent API के साथ काम नहीं करता था. साथ ही, यह Android पर Firefox के initTouchEvent से अलग था. आखिर में, 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);

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

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

    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 ट्रैकर | Chromium बग

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

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

MediaStream ended इवेंट, एट्रिब्यूट, और onended एट्रिब्यूट हटाएं

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

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

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

SVGSVGElement.viewPort को बंद करें

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

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

SVGViewElement.viewTarget को बंद करना

SVGViewElement.viewTarget एट्रिब्यूट, SVG2.0 स्पेसिफ़िकेशन का हिस्सा नहीं है. साथ ही, इसका इस्तेमाल बहुत कम होता है या होता ही नहीं है. इस एट्रिब्यूट का इस्तेमाल Chrome 54 में बंद कर दिया गया है. इसे Chrome 56 में हटा दिया जाएगा.

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

SVGZoomEvent हटाएं

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

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