เราเห็นการอัปเดตและการปรับปรุงผลิตภัณฑ์ ประสิทธิภาพการทำงาน และความสามารถของแพลตฟอร์มเว็บใน Chrome เกือบทุกเวอร์ชัน บทความนี้อธิบายการเลิกใช้งานและการนำออกใน Chrome 54 ซึ่งเป็นเวอร์ชันเบต้าตั้งแต่วันที่ 15 กันยายน รายการนี้อาจเปลี่ยนแปลงได้ตลอดเวลา
ปิดใช้การนำทางในตัวแฮนเดิลการยกเลิกการโหลด
TL;DR: ไม่อนุญาตให้ใช้การนำทางแบบข้ามต้นทางทั้งหมดในเครื่องจัดการเหตุการณ์ 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 คือการยกเลิกการรองรับทั้งหมด ด้วยเหตุนี้ Chrome 54 จึงไม่มีการรองรับ HTTP/0.9
นำการใช้ initTouchEvent
ออกแล้ว
TL;DR:
initTouchEvent
เลิกใช้งานแล้วเพื่อเปลี่ยนไปใช้ TouchEvent
constructor
เพื่อปรับปรุงการปฏิบัติตามข้อกำหนดและจะถูกนำออกทั้งหมดใน Chrome 54
เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium
นักพัฒนาซอฟต์แวร์สามารถสร้างเหตุการณ์การแตะแบบสังเคราะห์ใน Chrome โดยใช้ initTouchEvent
API มานานแล้ว ซึ่งมักจะใช้ในการจำลองเหตุการณ์การสัมผัสเพื่อการทดสอบหรือการทำให้ UI บางอย่างในเว็บไซต์ทำงานโดยอัตโนมัติ ตั้งแต่ Chrome 49 เป็นต้นไป API ที่เลิกใช้งานแล้วนี้ได้แสดง คำเตือน ต่อไปนี้
นอกจากที่ไม่ตรงกับข้อกำหนดของเหตุการณ์การแตะแล้ว ก็ยังมีเหตุผลอีกมากมายที่การเปลี่ยนแปลงนี้เป็นผลดี
การใช้งาน Chrome initTouchEvent
เข้ากันไม่ได้กับ initTouchEvent
API ของ Safari เลย และแตกต่างจาก Firefox ใน Android และสุดท้าย เครื่องมือสร้าง TouchEvent
นั้นใช้งานง่ายมาก
ด้วยเหตุนี้ เราจึงตัดสินใจที่จะปฏิบัติตามข้อกำหนดมากกว่าที่จะคง API ที่ไม่มีการระบุหรือไม่เข้ากันกับการใช้งานแบบอื่นๆ เพียงอย่างเดียว
นักพัฒนาซอฟต์แวร์ที่ต้องการทางเลือกควรใช้ตัวสร้าง TouchEvent
เนื่องจากการใช้งาน API initTouchEvent
ใน 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 ออกแล้ว
TL;DR: เรากำลังนำพร็อพเพอร์ตี้ keyboardEvent.keyIdentifier
ที่รองรับส่วนน้อยออกเพื่อเปลี่ยนไปใช้พร็อพเพอร์ตี้ KeyboardEvent.key
ที่อิงตามมาตรฐาน
เจตนาเพื่อนำออก | ตัวติดตาม Chromestatus | ข้อบกพร่อง Chromium
แอตทริบิวต์ keyboardEvent.keyIdentifier
เป็นสั้นๆ ในข้อกำหนด W3C ในปี 2009 และ 2010 อย่างไรก็ตาม โค้ดนี้มีการใช้งานเฉพาะใน WebKit เท่านั้น
นักพัฒนาแอปที่ต้องการแทนที่แอตทริบิวต์นี้จะใช้พร็อพเพอร์ตี้ KeyboardEvent.key
ตามมาตรฐานหรือพร็อพเพอร์ตี้ KeyboardEvent.code
ก็ได้ (ตามที่อธิบายไว้ในบทความที่เราทำในฤดูใบไม้ผลิที่ผ่านมา) เบราว์เซอร์แรกมีฐานผู้ใช้งานกว้างที่สุด โดยเบราว์เซอร์หลักในเดสก์ท็อปทั้งหมดรองรับ ยกเว้น Safari ปัจจุบัน Chrome, Firefox และ Opera รองรับรุ่นที่ใหม่กว่า การนำฟีเจอร์นี้ออกมีวัตถุประสงค์เพื่อกระตุ้นการใช้พร็อพเพอร์ตี้ KeyboardEvent.key
Apple ไม่มีคำอธิบายว่าจะสามารถรองรับการอัปเดตนี้หรือไม่ อย่างไรก็ตาม คุณสมบัติที่เลิกใช้แล้ว (แต่ยังไม่ได้นำออกจาก Chrome) KeyboardEvent.keyCode
และ KeyboardEvent.charCode
ยังคงมีให้บริการบน Safari
นำเหตุการณ์และแอตทริบิวต์ที่สิ้นสุดของ MediaStream ออก รวมถึงแอตทริบิวต์ปลายทาง
TL;DR: เรากำลังนำเหตุการณ์และแอตทริบิวต์ 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