Chrome เกือบทุกเวอร์ชันมีการอัปเดตและการปรับปรุงผลิตภัณฑ์ ประสิทธิภาพ และความสามารถของแพลตฟอร์มเว็บเป็นจำนวนมาก
ใน Chrome 50 (วันที่เบต้าโดยประมาณ: 10 ถึง 17 มีนาคม) มีการเปลี่ยนแปลงหลายอย่างใน Chrome รายการนี้อาจมีการเปลี่ยนแปลงได้ทุกเมื่อ
เลิกใช้งาน AppCache ในบริบทที่ไม่ปลอดภัย
สรุป: เราจะเลิกใช้งาน AppCache ในต้นทางที่ไม่ปลอดภัยเพื่อขัดขวาง Cross-site Scripting เราคาดว่าใน Chrome 52 ฟีเจอร์นี้จะใช้ได้กับต้นทางที่แสดงเนื้อหาผ่าน HTTPS เท่านั้น
ตั้งใจที่จะนำออก | Chromestatus เครื่องมือติดตาม | ข้อบกพร่องของ Chromium
AppCache คือฟีเจอร์ที่อนุญาตให้เข้าถึงแหล่งที่มาแบบออฟไลน์และถาวร ซึ่งเป็นการยกระดับสิทธิ์ที่มีประสิทธิภาพสำหรับการโจมตีแบบ Cross-Site Scripting การดำเนินการนี้เป็นส่วนหนึ่งของความพยายามที่ยิ่งใหญ่กว่าในการนำฟีเจอร์ที่มีประสิทธิภาพออกจากต้นทางที่ไม่ปลอดภัย
Chrome กำลังนำเวกเตอร์การโจมตีนี้ออกโดยอนุญาตให้ใช้ผ่าน HTTPS เท่านั้น เราจะเลิกใช้งานการรองรับ HTTP ใน Chrome 50 และคาดว่าจะนําการรองรับดังกล่าวออกทั้งหมดใน Chrome 52
นำ Document.defaultCharset ออกแล้ว
สรุปสั้นๆ: document.defaultCharset
ถูกนำออกเพื่อปรับปรุงการปฏิบัติตามข้อกำหนด
Intent to Remove | Chromestatus Tracker | CRBug Issue
document.defaultCharset
ซึ่งเลิกใช้งานใน Chrome 49 เป็นพร็อพเพอร์ตี้แบบอ่านอย่างเดียวที่แสดงผลการเข้ารหัสอักขระเริ่มต้นของระบบของผู้ใช้ตามการตั้งค่าภูมิภาค เราไม่พบว่าการคงค่านี้ไว้มีประโยชน์เนื่องจากวิธีที่เบราว์เซอร์ใช้ข้อมูลการเข้ารหัสอักขระในการตอบกลับ HTTP หรือในเมตาแท็กที่ฝังอยู่ในหน้า
แต่ให้ใช้ document.characterSet
เพื่อรับค่าแรกที่ระบุในส่วนหัว HTTP แทน หากไม่มีค่าดังกล่าว คุณจะได้รับค่าที่ระบุไว้ในแอตทริบิวต์ charset
ขององค์ประกอบ <meta>
(เช่น <meta
charset="utf-8">
) สุดท้าย หากไม่มีค่าใดเลย ระบบจะใช้ document.characterSet
เป็นการตั้งค่าระบบของผู้ใช้
คุณสามารถอ่านการพูดคุยเพิ่มเติมเกี่ยวกับเหตุผลที่ไม่ระบุข้อกำหนดนี้ในปัญหา github นี้
นำแอตทริบิวต์ย่อยออกจากองค์ประกอบลิงก์แล้ว
สรุป: นำการรองรับค่า subresource
สำหรับแอตทริบิวต์ rel
ของ HTMLLinkElement
ออก
Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium
เจตนาของแอตทริบิวต์ subresource
ใน <link> คือเพื่อโหลดทรัพยากรล่วงหน้าในช่วงเวลาที่เบราว์เซอร์ไม่ได้ใช้งาน หลังจากเบราว์เซอร์ดาวน์โหลดหน้าเว็บแล้ว ก็จะดาวน์โหลดทรัพยากรอื่นๆ เช่น หน้าอื่นๆ ล่วงหน้าได้ เพื่อที่เมื่อผู้ใช้ขอ เบราว์เซอร์จะดึงข้อมูลเหล่านั้นจากแคชของเบราว์เซอร์ได้
แอตทริบิวต์ subresource
มีปัญหาหลายอย่าง ประการแรกคือไม่เคยทำงานตามที่ตั้งใจไว้ ทรัพยากรที่อ้างอิงได้รับการดาวน์โหลดโดยมีลําดับความสําคัญต่ำ ไม่เคยมีการใช้แอตทริบิวต์นี้ในเบราว์เซอร์อื่นนอกเหนือจาก Chrome การติดตั้งใช้งาน Chrome มีข้อบกพร่องที่ทำให้มีการดาวน์โหลดทรัพยากร 2 ครั้ง
นักพัฒนาแอปที่ต้องการปรับปรุงประสบการณ์ของผู้ใช้ผ่านการโหลดเนื้อหาล่วงหน้ามีตัวเลือกมากมาย ซึ่งตัวเลือกที่ปรับแต่งได้มากที่สุดคือการสร้าง Service Worker เพื่อใช้ประโยชน์จากการแคชล่วงหน้าและ Caches API โซลูชันเพิ่มเติมรวมถึงค่าอื่นๆ สำหรับแอตทริบิวต์ rel
ซึ่งรวมถึง preconnect
, prefetch
, preload
, prerender
ตัวเลือกเหล่านี้บางอย่างเป็นตัวเลือกทดลองและอาจไม่รองรับในวงกว้าง
นำ TLS เวอร์ชันสำรองที่ไม่ปลอดภัยออก
สรุป: นำกลไกการบังคับให้เซิร์ฟเวอร์แสดงผลข้อมูลโดยใช้ TLS เวอร์ชันที่มีความปลอดภัยน้อยหรือไม่ปลอดภัยออก
Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium
Transport Layer Security (TLS) รองรับกลไกในการเจรจาเวอร์ชัน ซึ่งช่วยให้สามารถเปิดตัว TLS เวอร์ชันใหม่ได้โดยไม่ทำให้ใช้งานร่วมกันไม่ได้ เซิร์ฟเวอร์บางเครื่องติดตั้งใช้งานในลักษณะที่เบราว์เซอร์ต้องใช้ปลายทางที่ไม่ปลอดภัยเป็นทางเลือกสำรอง ด้วยเหตุนี้ ผู้โจมตีจึงสามารถบังคับให้เว็บไซต์ทุกแห่ง (ไม่ใช่แค่เว็บไซต์ที่กำหนดค่าไม่ถูกต้อง) เจรจาต่อรองเพื่อใช้ TLS เวอร์ชันที่อ่อนแอลง
เว็บไซต์ที่ได้รับผลกระทบจะเชื่อมต่อกับ ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION
ไม่ได้ ผู้ดูแลระบบควรตรวจสอบว่าซอฟต์แวร์เซิร์ฟเวอร์เป็นเวอร์ชันล่าสุด หากยังคงไม่ได้รับการแก้ไข โปรดติดต่อผู้ให้บริการซอฟต์แวร์เซิร์ฟเวอร์เพื่อดูว่ามีวิธีแก้ไขหรือไม่
นำ KeyboardEvent.prototype.keyLocation ออก
สรุป: นำชื่อแทนที่ไม่จำเป็นสำหรับแอตทริบิวต์ Keyboard.prototype.location
ออก
Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium
แอตทริบิวต์นี้เป็นเพียงชื่อแทนของแอตทริบิวต์ Keyboard.prototype.location
ซึ่งช่วยให้คีย์ต่างๆ ที่อยู่หลายแห่งบนแป้นพิมพ์ชัดเจนได้ ตัวอย่างเช่น แอตทริบิวต์ทั้ง 2 รายการช่วยให้นักพัฒนาแอปแยกความแตกต่างระหว่างแป้น Enter
2 ตัวในแป้นพิมพ์แบบขยายได้
แฮนเดิลข้อผิดพลาดและการดำเนินการที่สำเร็จซึ่งต้องใช้ในเมธอด RTCPeerConnection
สรุป: ตอนนี้เมธอด WebRTC
RTCPeerConnection createOffer()
และ createAnswer()
ต้องใช้ตัวแฮนเดิลข้อผิดพลาดและตัวแฮนเดิลสำเร็จ ก่อนหน้านี้ คุณสามารถเรียกใช้เมธอดเหล่านี้ได้ด้วยตัวแฮนเดิลเฉพาะในกรณีที่สำเร็จเท่านั้น การใช้งานดังกล่าวเลิกใช้งานแล้ว
Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium
ใน Chrome 49 เราได้เพิ่มคำเตือนหากคุณเรียกใช้ setLocalDescription()
หรือ setRemoteDescription()
โดยไม่ได้ระบุตัวแฮนเดิลข้อผิดพลาด อาร์กิวเมนต์ของตัวแฮนเดิลข้อผิดพลาดเป็นสิ่งที่จำเป็นต้องมีตั้งแต่ Chrome 50 เป็นต้นไป
ซึ่งเป็นส่วนหนึ่งของขั้นตอนการทำให้สัญญาใช้วิธีการเหล่านี้ตามที่ข้อกำหนดของ WebRTC กำหนด
ต่อไปนี้คือตัวอย่างจาก WebRTC การสาธิต RTCPeerConnection (main.js, บรรทัดที่ 126)
function onCreateOfferSuccess(desc) {
pc1.setLocalDescription(desc, function() {
onSetLocalSuccess(pc1);
}, onSetSessionDescriptionError);
pc2.setRemoteDescription(desc, function() {
onSetRemoteSuccess(pc2);
}, onSetSessionDescriptionError);
pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
}
โปรดทราบว่าทั้ง setLocalDescription()
และ setRemoteDescription()
ต่างก็มีตัวแฮนเดิลข้อผิดพลาด เบราว์เซอร์รุ่นเก่าที่คาดหวังเฉพาะตัวแฮนเดิลสําเร็จจะละเว้นอาร์กิวเมนต์ตัวแฮนเดิลข้อผิดพลาดหากมี การเรียกใช้โค้ดนี้ในเบราว์เซอร์รุ่นเก่าจะไม่ทำให้เกิดข้อยกเว้น
โดยทั่วไปแล้ว เราขอแนะนำให้คุณใช้ adapter.js
ซึ่งเป็นชิมที่ได้รับการดูแลโดยโปรเจ็กต์ WebRTC สำหรับแอปพลิเคชัน WebRTC เวอร์ชันที่ใช้งานจริง เพื่อปกป้องแอปจากการเปลี่ยนแปลงข้อกำหนดและความแตกต่างของคำนำหน้า
ระบบไม่รองรับ XMLHttpRequestProgressEvent อีกต่อไป
สรุป: ระบบจะนำอินเทอร์เฟซ XMLHttpRequestProgressEvent
ออกพร้อมกับแอตทริบิวต์ position
และ totalSize
Intent to Remove | Chromestatus Tracker | ข้อบกพร่องของ Chromium
เหตุการณ์นี้มีไว้เพื่อรองรับพร็อพเพอร์ตี้ความเข้ากันได้ของ Gecko position
และ totalSize
การรองรับทั้ง 3 รายการถูกยกเลิกใน Mozilla 22 และฟังก์ชันการทำงานดังกล่าวถูกแทนที่ด้วย ProgressEvent
ไปนานแล้ว
var progressBar = document.getElementById("p"),
client = new XMLHttpRequest()
client.open("GET", "magical-unicorns")
client.onprogress = function(pe) {
if(pe.lengthComputable) {
progressBar.max = pe.total
progressBar.value = pe.loaded
}
}
นำส่วนขยายสื่อที่เข้ารหัสที่มีคำนำหน้าออก
สรุป: เราได้นําส่วนขยายสื่อที่เข้ารหัสซึ่งมีคํานําหน้าออกแล้ว แทนที่ด้วยส่วนขยายที่ไม่มีคํานําหน้าซึ่งอิงตามข้อกําหนด
ตั้งใจที่จะนำออก | Chromestatus เครื่องมือติดตาม | ข้อบกพร่องของ Chromium
ใน Chrome 42 เราได้ส่งส่วนขยายสื่อที่เข้ารหัสตามข้อมูลจำเพาะที่ไม่มีคำนำหน้า API นี้ใช้เพื่อสำรวจ เลือก และโต้ตอบกับระบบการจัดการสิทธิ์ดิจิทัลเพื่อใช้ร่วมกับ HTMLMediaElement
เหตุการณ์นั้นเกิดขึ้นเกือบ 1 ปีที่แล้ว และเนื่องจากเวอร์ชันที่ไม่มีคำต่อท้ายมีความสามารถมากกว่าเวอร์ชันที่มีคำต่อท้าย เราจึงถึงเวลานำเวอร์ชันที่มีคำต่อท้ายของ API ออก
นำการรองรับพร็อพเพอร์ตี้ SVGElement.offset ออก
สรุป: เราได้ยกเลิกพร็อพเพอร์ตี้ออฟเซตสำหรับ SVGElement และใช้พร็อพเพอร์ตี้ที่รองรับในวงกว้างมากขึ้นใน HTMLElement
ตั้งใจที่จะนำออก | Chromestatus เครื่องมือติดตาม | ข้อบกพร่องของ Chromium
ทั้ง HTMLElement
และ SVGElement
รองรับพร็อพเพอร์ตี้ออฟเซตมานานแล้ว แต่ Gecko และ Edge รองรับเฉพาะใน HTMLElement
เราเลิกใช้งานพร็อพเพอร์ตี้เหล่านี้ใน Chrome 48 เพื่อปรับปรุงความสอดคล้องกันระหว่างเบราว์เซอร์ และตอนนี้ก็กําลังนําออก
แม้ว่าพร็อพเพอร์ตี้ที่เทียบเท่าจะเป็นส่วนหนึ่งของ HTMLElement
แต่นักพัฒนาแอปที่กำลังมองหาทางเลือกอื่นก็สามารถใช้ getBoundingClientRect()
ได้เช่นกัน