การเลิกใช้งานและการนำ API ออกใน Chrome 54

ใน Chrome เกือบทุกเวอร์ชัน เราเห็นการอัปเดตและการปรับปรุงผลิตภัณฑ์ ประสิทธิภาพ และความสามารถของแพลตฟอร์มเว็บจำนวนมาก บทความนี้อธิบายการเลิกใช้งานและการนำออกใน Chrome 54 ซึ่งเป็นเวอร์ชันเบต้า ณ วันที่ 15 กันยายน รายการนี้อาจมีการเปลี่ยนแปลงได้ทุกเมื่อ

ปิดใช้การนำทางในตัวแฮนเดิลการยกเลิกการโหลด

สรุป: เราจะไม่อนุญาตการนำทางแบบข้ามต้นทางทั้งหมดในตัวแฮนเดิลเหตุการณ์ window.onunload เพื่อให้ Chrome เป็นไปตามข้อกำหนด HTML รวมถึง Firefox และ Safari

ความตั้งใจที่จะนำออก | เครื่องมือติดตาม Chromestatus | ข้อบกพร่องของ Chromium

Chrome เวอร์ชันก่อนหน้าอนุญาตให้ขัดจังหวะการนำทางข้ามต้นทางภายใน window.onunload โดยการตั้งค่า window.location.href = '#fragment' ตามข้อกำหนด HTML อนุญาตให้ใช้การนำทางในหน้าเท่านั้นในตัวแฮนเดิลการเลิกโหลด และใน Chrome เวอร์ชันก่อนหน้า ระบบจะบล็อกวิธีการนำทางอื่นๆ ตามที่ข้อกำหนดกำหนดไว้ ตั้งแต่ Chrome 54 เป็นต้นไป ระบบจะไม่อนุญาตการนำทางดังกล่าวเพื่อให้เป็นไปตามข้อกำหนด รวมถึง Firefox และ Safari

เลิกใช้งาน HTTP/0.9 แล้ว

TL;DR: HTTP/0.9 เลิกใช้งานแล้ว นักพัฒนาแอปควรเปลี่ยนไปใช้เวอร์ชันที่ใหม่กว่า ซึ่งควรเป็น HTTP/2

ความตั้งใจที่จะนำออก | เครื่องมือติดตาม Chromestatus | ข้อบกพร่องของ Chromium

HTTP/0.9 เป็นรุ่นก่อนหน้าของ HTTP/1.x แต่ไม่มีฟีเจอร์หลายอย่างเหมือนรุ่นต่อๆ ไป ข้อกังวลที่สำคัญสำหรับเว็บสมัยใหม่คือการไม่มีส่วนหัวการตอบกลับ หากไม่มีส่วนหัวเหล่านี้ ก็จะไม่มีวิธีตรวจสอบว่าการตอบสนอง HTTP/0.9 เป็นการตอบสนอง HTTP/0.9 จริงๆ ซึ่งอาจทำให้เกิดปัญหาหลายอย่าง ตัวอย่างปัญหา ได้แก่

  • ไคลเอ็นต์ที่ถือว่าการตอบกลับข้อผิดพลาดบางอย่างเป็นการตอบกลับ HTTP/0.9 ที่ถูกต้อง
  • เซิร์ฟเวอร์ที่ไม่ปิดซ็อกเก็ตคำขอทำให้ไคลเอ็นต์ถือว่าการตอบกลับเป็น GET ที่ค้างอยู่ ซึ่งจะยังคงใช้งานได้ตลอดไปหรือจนกว่าผู้ใช้จะออกจากหน้าที่ส่งคำขอ
  • เซิร์ฟเวอร์ที่ระบุต่อเบราว์เซอร์ไม่ได้ว่าคำขอไม่สำเร็จ ซึ่งอาจทำให้เกิดปัญหาเกี่ยวกับฮิวริสติกของการแคช

วิธีเดียวที่รับประกันได้ว่าจะแก้ไขปัญหาเกี่ยวกับ HTTP/0.9 คือการนำการรองรับออกทั้งหมด ด้วยเหตุนี้เราจึงนำการรองรับ HTTP/0.9 ออกใน Chrome 54

นำการใช้ initTouchEvent ออกแล้ว

สรุป initTouchEvent เลิกใช้งานแล้วเพื่อใช้ TouchEvent constructor แทนเพื่อปรับปรุง การปฏิบัติตามข้อกำหนดของสเปค และจะถูกนำออกทั้งหมดใน Chrome 54

ความตั้งใจที่จะนำออก | เครื่องมือติดตาม Chromestatus | ข้อบกพร่องของ Chromium

เป็นเวลานานแล้วที่นักพัฒนาแอปสามารถสร้างเหตุการณ์สัมผัสสังเคราะห์ใน Chrome โดยใช้ initTouchEvent API ซึ่งมักใช้เพื่อจำลองเหตุการณ์สัมผัส ทั้งเพื่อการทดสอบหรือการทำงานอัตโนมัติของ UI บางอย่างในเว็บไซต์ ตั้งแต่ Chrome 49 เป็นต้นมา API ที่เลิกใช้งานแล้วนี้จะแสดงคำเตือนต่อไปนี้

คำเตือนให้ระวังเหตุการณ์บริเวณชายฝั่ง
เราเลิกใช้งานแล้วและจะนำออกใน M53 ประมาณเดือนกันยายน 2016TouchEvent.initTouchEvent โปรดใช้ตัวสร้าง TouchEvent แทน ดูรายละเอียดเพิ่มเติมได้ที่ https://www.chromestatus.com/features/5730982598541312

นอกเหนือจากที่ไม่ได้อยู่ในข้อกำหนดของเหตุการณ์แบบสัมผัสแล้ว ยังมีเหตุผลอีกหลายประการที่ทำให้การเปลี่ยนแปลงนี้เป็นสิ่งที่ดี การติดตั้งใช้งาน initTouchEvent ใน Chrome ไม่สามารถใช้งานร่วมกับ initTouchEvent API ของ Safari ได้เลย และแตกต่างจาก Firefox บน Android และสุดท้ายTouchEventคอนสตรัคเตอร์ก็ใช้งานง่ายขึ้นมาก

ด้วยเหตุนี้ เราจึงตัดสินใจทำตามข้อกำหนดแทนที่จะดูแล API ที่ไม่ได้ระบุข้อกำหนดและไม่สามารถใช้งานร่วมกับการติดตั้งใช้งานอื่นๆ ได้ นักพัฒนาแอปที่ต้องการใช้ทางเลือกอื่นควรใช้เครื่องมือสร้าง TouchEvent

เนื่องจากการติดตั้งใช้งาน initTouchEvent API ใน iOS และ Android/Chrome แตกต่างกันมาก เว็บไซต์จึงมักมี โค้ดในลักษณะต่อไปนี้ (มักลืม 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" ใน User-Agent และ Chrome ใน Android จะตรงกันและได้รับผลกระทบจากการเลิกใช้งานนี้ แต่ยังนำออกไม่ได้ในตอนนี้ เนื่องจากจะมีเบราว์เซอร์อื่นๆ ที่ใช้ WebKit และ Blink เวอร์ชันเก่ากว่าใน Android อยู่สักระยะหนึ่ง ซึ่งคุณจะต้องรองรับ API เวอร์ชันเก่าต่อไป

หากต้องการจัดการ TouchEvent บนเว็บอย่างถูกต้อง คุณควรเปลี่ยนโค้ดเพื่อ รองรับ Firefox, IE Edge และ Chrome โดยตรวจสอบว่ามี TouchEvent ในออบเจ็กต์ window หรือไม่ และหากมี "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 เป็นส่วนหนึ่งของข้อกำหนดเฉพาะของ W3C ในช่วงสั้นๆ ในปี 2009 และ 2010 แต่มีการติดตั้งใช้งานใน 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 มาประมาณ 3 ปีแล้ว นักพัฒนาแอปที่ต้องการดูเหตุการณ์ควรใช้ MediaStreamTracks แทน MediaStreams

เลิกใช้งาน SVGSVGElement.viewPort

การติดตั้งใช้งานใช้ไม่ได้ใน Chrome ตั้งแต่ปี 2012 แอตทริบิวต์นี้ไม่มีอยู่ในเบราว์เซอร์อื่นๆ เลย และระบบได้นำออกจากข้อกำหนดแล้ว ด้วยเหตุนี้ เราจึงจะเลิกใช้งานพร็อพเพอร์ตี้นี้ เราคาดว่าจะนำฟีเจอร์นี้ออกใน Chrome 55

ความตั้งใจที่จะนำออก | เครื่องมือติดตาม Chromestatus | ข้อบกพร่องของ Chromium

เลิกใช้งาน SVGViewElement.viewTarget

แอตทริบิวต์ SVGViewElement.viewTarget ไม่ได้เป็นส่วนหนึ่งของข้อกำหนด SVG2.0 และมีการใช้งานน้อยหรือไม่มีเลย เราเลิกใช้งานแอตทริบิวต์นี้ใน Chrome 54 เราคาดว่าจะนำออกใน Chrome 56

ความตั้งใจที่จะนำออก | เครื่องมือติดตาม Chromestatus | ข้อบกพร่องของ Chromium

นำ SVGZoomEvent ออก

SVGZoomEvent ไม่ได้เป็นส่วนหนึ่งของข้อกำหนด SVG2.0 และไม่ทำงานใน Chromium แม้ว่าฟีเจอร์นี้จะยังตรวจพบได้ แต่ก็อาจทำให้นักพัฒนาแอปสับสนได้ ระบบจะนำออก

ความตั้งใจที่จะนำออก | เครื่องมือติดตาม Chromestatus | ข้อบกพร่องของ Chromium