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

Joe Medley
Joe Medley

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

ความปลอดภัย

ตอนนี้ crypto.subtle ต้องใช้ต้นทางที่ปลอดภัยแล้ว

Web Crypto API ซึ่งได้รับการสนับสนุนมาตั้งแต่ Chrome 37 ทำงานที่ไม่ปลอดภัยมาโดยตลอด เนื่องจากนโยบายของ Chrome ที่มีมาอย่างยาวนาน ต้องการต้นทางที่ปลอดภัยสำหรับฟีเจอร์ที่มีประสิทธิภาพ crypto.subtle ไม่ได้ปรากฏในต้นทางที่ปลอดภัยเท่านั้น

ตั้งใจที่จะนำออก | ข้อบกพร่องของ Chromium

นำการนำทางเฟรมบนสุดที่เริ่มต้นในเนื้อหาไปยัง URL ข้อมูลออก

เนื่องจากพวกเขาไม่คุ้นเคยกับผู้ใช้เบราว์เซอร์ที่ไม่เชี่ยวชาญด้านเทคนิค เราจึง เห็นการใช้รูปแบบ data: ในการปลอมแปลงและฟิชชิงมากขึ้นเรื่อยๆ การโจมตี เราได้บล็อกหน้าเว็บไม่ให้โหลด URL data: รายการเพื่อป้องกันปัญหานี้ ในเฟรมด้านบน รายการนี้มีผลกับแท็ก <a>, window.open window.location และกลไกที่คล้ายกัน รูปแบบ data: จะยังคงใช้ได้กับ ทรัพยากรที่โหลดตามหน้า

ฟีเจอร์นี้เลิกใช้งานแล้วใน Chrome 58 และถูกนำออกแล้ว

ตั้งใจที่จะนำออก | ตัวติดตามสถานะ Chrome | ข้อบกพร่องของ Chromium

ปิดใช้งาน navigator.sendBeacon() ชั่วคราวสำหรับ BLOB บางรายการ

ฟังก์ชัน navigator.sendBeacon() พร้อมใช้งานแล้ว ตั้งแต่ Chrome 39 อาร์กิวเมนต์ data ของฟังก์ชันอาจมีค่าใดค่าหนึ่งต่อไปนี้ ตามการนำไปใช้งานตั้งแต่แรก BLOB ที่กำหนดเองในประเภทที่ไม่เข้าข่าย CORS เราเชื่อว่านี่เป็นศักยภาพ ภัยคุกคามด้านความปลอดภัย แต่ยังไม่มีใครพยายามแสวงหาประโยชน์ เนื่องจากเราไม่ แก้ไขปัญหาอย่างสมเหตุสมผลในทันที แต่ชั่วคราว sendBeacon() ไม่ได้ เรียกใช้ได้นานขึ้นใน BLOB ที่จัดอยู่ในประเภทที่ไม่ได้อยู่ใน CORS

แม้ว่าการเปลี่ยนแปลงนี้จะใช้กับ Chrome 60 แต่ได้มีการผสานรวมแล้ว กลับไปใช้ Chrome 59

ข้อบกพร่องของ Chromium

CSS

ทำให้ Combinator สืบทอดที่ลดหลั่นเป็นช่วงๆ ทำตัวเหมือนเครื่องมือแบบผสมที่สืบทอดมา

องค์ประกอบสืบทอดจากดาบปลายแหลม (>>>) ของ โมดูลการกำหนดขอบเขต CSS ระดับ 1 มีไว้เพื่อจับคู่รายการย่อยขององค์ประกอบระดับบนที่เฉพาะเจาะจง แม้ในขณะที่ปรากฏภายในเงาต้นไม้ การดำเนินการนี้มีข้อจำกัดบางอย่าง ก่อนอื่น ตามข้อมูลจำเพาะ สามารถใช้ได้เฉพาะในการเรียก JavaScript เช่น querySelector() และ ในสไตล์ชีต และที่สำคัญไปกว่านั้น ผู้ให้บริการเบราว์เซอร์ไม่สามารถ ทำงานได้มากกว่า Shadow DOM ระดับ 1

ด้วยเหตุนี้ เราจึงนำชุดค่าผสมองค์ประกอบสืบทอดออกจากข้อกำหนดที่เกี่ยวข้อง รวมถึง Shadow DOM v1 นำตัวเลือกนี้ออกแทนการแยกหน้าเว็บ จาก Chromium เราเลือกที่จะใช้นามแฝง สืบทอดการเจาะเงา combinator ไปยังชุดค่าผสมสืบทอด ลักษณะการทำงานเดิมคือ เลิกใช้งานแล้วใน Chrome 45 เราเริ่มใช้ลักษณะการทำงานแบบใหม่ใน Chrome 61 แล้ว

ตั้งใจที่จะนำออก | ตัวติดตามสถานะ Chrome | ข้อบกพร่องของ Chromium

JavaScript

เลิกใช้งานและนำ RTCPeerConnection.getStreamById() ออก

เมื่อเกือบ 2 ปีก่อน เราได้นำ getStreamById() ออกจากข้อกำหนด WebRTC แล้ว เบราว์เซอร์อื่นๆ ส่วนใหญ่มี นำสิ่งนี้ออกจากการใช้งานแล้ว แม้ว่าฟังก์ชันนี้ ที่เชื่อกันว่าเป็นรายการที่ใช้งานน้อย แต่ก็เชื่อว่ามีผู้เยาว์อยู่บ้าง ความเสี่ยงในการทำงานร่วมกันกับเบราว์เซอร์ Edge และ WebKit นอกเหนือจาก Safari ซึ่งยังรองรับ getStreamById() อยู่ นักพัฒนาแอปต้องการทางเลือก คุณสามารถดูโค้ดตัวอย่างในส่วน "ความตั้งใจที่จะนำออก" ได้ที่ด้านล่าง

การนําออกใน Chrome 62

ตั้งใจที่จะนำออก | ตัวติดตามสถานะ Chrome | ข้อบกพร่องของ Chromium

เลิกใช้งาน SVGPathElement.getPathSegAtLength

getPathSegAtLength() ได้นำออกจากข้อกำหนด SVG กว่า 2 ปีแล้ว เนื่องจากเมธอดนี้มี Hit เพียงไม่กี่รายการใน httparchive จะเลิกใช้งานใน Chrome 60 เราคาดว่าการนำออกจะอยู่ใน Chrome 62 ซึ่ง จะจัดส่งในช่วงต้นหรือกลางเดือนตุลาคม

ความตั้งใจที่จะเลิกใช้งาน | ตัวติดตามสถานะ Chrome | ข้อบกพร่องของ Chromium

ย้าย getContextAttributes() ที่อยู่หลัง Flag

รองรับฟังก์ชัน getContextAttributes() ใน CanvasRenderingContext2D ตั้งแต่ปี 2013 อย่างไรก็ตาม ฟีเจอร์นั้นไม่ได้เป็นส่วนหนึ่งของมาตรฐานใดๆ และไม่ได้กลายเป็น ส่วนหนึ่งนับตั้งแต่เวลานั้น ควรมีการติดตั้งใช้งานเบื้องหลัง แฟล็กบรรทัดคำสั่ง --enable-experimental-canvas-features รายการ แต่มีข้อผิดพลาดเกิดขึ้น ไม่ได้ ใน Chrome 60 การควบคุมดูแลนี้ได้รับการแก้ไขแล้ว เชื่อกันว่า การเปลี่ยนแปลงนั้นปลอดภัย เนื่องจากไม่มีข้อมูลที่แสดงให้เห็นว่ามีคนใช้วิธีการนี้

ข้อบกพร่องของ Chromium

นำ Headers.prototype.getAll() ออก

ระบบกำลังนำฟังก์ชัน Headers.prototype.getAll() ออกตามการอัปเดตล่าสุด ข้อกำหนดในการดึงข้อมูลเวอร์ชันเดิม

ตั้งใจที่จะนำออก | ตัวติดตามสถานะ Chrome | ข้อบกพร่องของ Chromium

นำindexDB.webkitGetDatabaseNames() ออก

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

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

นักพัฒนาแอปที่ต้องการฟังก์ชันการทำงานนี้จะต้องพัฒนาโซลูชันของตนเอง ตัวอย่างเช่น ไลบรารีอย่าง Dexie.js ใช้ตารางส่วนกลาง ซึ่งเป็นอีกฐานข้อมูลหนึ่งสำหรับติดตามชื่อฐานข้อมูล

ฟีเจอร์นี้เลิกใช้งานแล้วใน Chrome 58 และถูกนำออกแล้ว

ตั้งใจที่จะนำออก | ตัวติดตามสถานะ Chrome | ข้อบกพร่องของ Chromium

นำ WEBKIT_KEYFRAMES_RULE และ WEBKIT_KEYFRAME_RULE ออก

ค่าคงที่ WEBKIT_KEYFRAMES_RULE และ WEBKIT_KEYFRAME_RULE ที่ไม่เป็นมาตรฐาน จะถูกนำออกจาก กฎของ CSS นักพัฒนาแอปควรใช้ KEYFRAMES_RULE และ KEYFRAME_RULE แทน

ตั้งใจที่จะนำออก | ตัวติดตามสถานะ Chrome | ข้อบกพร่องของ Chromium

อินเทอร์เฟซผู้ใช้

ต้องใช้ท่าทางสัมผัสของผู้ใช้สำหรับกล่องโต้ตอบ beforeunload

ตั้งแต่ Chrome 60 เป็นต้นไป กล่องโต้ตอบ beforeunload จะปรากฏก็ต่อเมื่อเฟรม พยายามที่จะแสดงว่าได้รับท่าทางสัมผัสของผู้ใช้หรือการโต้ตอบของผู้ใช้ (หรือหาก เฟรมที่ฝังอยู่มีท่าทางสัมผัสดังกล่าว) เพื่อความชัดเจน นี่ไม่ใช่ เปลี่ยนเป็นการมอบหมายงานของกิจกรรม beforeunload เพียงแค่เปลี่ยนเป็น กล่องโต้ตอบจะปรากฏหรือไม่

กล่องโต้ตอบ beforeunload เป็นกล่องโต้ตอบโมดัลแอป ดังนั้นโดยธรรมชาติ ผู้ใช้โฮสต์ ซึ่งหมายความว่าจะตอบสนองต่อการนำทางของผู้ใช้โดยการถามคำถามที่ผู้ใช้ การพิพากษาดังกล่าว มีการใช้ฟีเจอร์นี้ในเชิงบวก ตัวอย่างเช่น เรามักจะใช้ เพื่อเตือนผู้ใช้เมื่อข้อมูลกำลังจะสูญหาย

ขณะที่หน้าเว็บสามารถแสดงข้อความสำหรับกล่องโต้ตอบ beforeunload ได้ ถูกนำออกไปสักพักแล้ว กล่องโต้ตอบ beforeunload ฉบับยังคงเป็นเวกเตอร์ของการละเมิด ใน โดยเฉพาะอย่างยิ่ง กล่องโต้ตอบ beforeunload เป็นองค์ประกอบหนึ่งของเว็บไซต์หลอกลวง ซึ่ง เสียงอัตโนมัติและข้อความข่มขู่จะให้บริบทที่ว่า Chromium ระบุ "แน่ใจไหมว่าต้องการออกจากหน้านี้" ข้อความกลายเป็นเรื่องน่ากังวล

เราต้องการทำความเข้าใจเพิ่มเติม และอนุญาตให้ใช้ beforeunload อย่างเหมาะสมเท่านั้น กล่องโต้ตอบ การใช้งานกล่องโต้ตอบที่ดีคือสิ่งที่ผู้ใช้มีสถานะ แพ้ หากผู้ใช้ไม่เคยโต้ตอบกับหน้าเว็บ ผู้ใช้ก็จะไม่มี สถานะที่อาจสูญหายได้ และเราจะไม่ยอมเสี่ยงให้ข้อมูลผู้ใช้สูญหายโดย ระงับกล่องโต้ตอบในกรณีดังกล่าว