Ngừng sử dụng và xoá trong Chrome 60

Liên khúc Joe
Joe Medley

Trong hầu hết mọi phiên bản Chrome, chúng tôi nhận thấy nhiều nội dung cập nhật và cải tiến đáng kể đối với sản phẩm, hiệu suất cũng như các khả năng của Nền tảng web. Bài viết này mô tả việc ngừng sử dụng và xoá trong Chrome 60 (đang trong giai đoạn thử nghiệm beta kể từ ngày 8 tháng 6). Danh sách này có thể thay đổi bất cứ lúc nào.

Bảo mật

crypto.subtle hiện yêu cầu một nguồn gốc bảo mật

Web Crypto API được hỗ trợ kể từ Chrome 37 luôn hoạt động trên các nguồn gốc không an toàn. Do chính sách ưu tiên nguồn gốc bảo mật cho các tính năng mạnh đã có từ lâu của Chrome, nên crypto.subtle không chỉ hiển thị trên các nguồn gốc bảo mật.

Ý định xoá | Lỗi Chromium

Xoá các thao tác điều hướng khung trên cùng do nội dung khởi tạo đến URL dữ liệu

Do họ chưa quen thuộc với những người dùng trình duyệt không liên quan đến kỹ thuật, nên chúng tôi ngày càng nhận thấy giao thức data: được dùng trong các cuộc tấn công giả mạo và lừa đảo. Để ngăn chặn điều này, chúng tôi sẽ chặn các trang web tải URL data: ở khung trên cùng. Điều này áp dụng cho thẻ <a>, window.open, window.location và các cơ chế tương tự. Lược đồ data: sẽ vẫn hoạt động đối với các tài nguyên do một trang tải.

Tính năng này không được dùng trong Chrome 58 và hiện đã bị loại bỏ.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Tạm thời tắt navigator.sendBeacon() cho một số blob

Hàm navigator.sendBeacon() đã có kể từ Chrome 39. Như được triển khai ban đầu, đối số data của hàm này có thể chứa bất kỳ blob tuỳ ý nào có loại không được liệt kê vào danh sách an toàn của CORS. Chúng tôi tin rằng đây là một mối đe doạ bảo mật tiềm ẩn, mặc dù chưa có ai tìm cách khai thác lỗ hổng này. Vì chúng tôi KHÔNG có biện pháp khắc phục hợp lý ngay lập tức cho vấn đề này, nên tạm thời, sendBeacon() không thể gọi được trên các blob có loại KHÔNG được liệt kê an toàn theo CORS.

Mặc dù thay đổi này đã được triển khai cho Chrome 60, nhưng sau đó nó đã được hợp nhất trở lại Chrome 59.

Lỗi Chromium

CSS

Làm cho trình kết hợp con cháu xuyên bóng hoạt động giống như trình kết hợp con

Tổ hợp thành phần con xuyên bóng (>>>), một phần của Mô-đun CSS phạm vi cấp 1, được thiết kế để khớp với các thành phần con của một phần tử đối tượng cấp trên cụ thể, ngay cả khi chúng xuất hiện bên trong cây bóng. Việc này có một số hạn chế. Trước tiên, theo thông số kỹ thuật, bạn chỉ có thể sử dụng thuộc tính này trong các lệnh gọi JavaScript như querySelector() và không dùng được trong biểu định kiểu. Quan trọng hơn, các nhà cung cấp trình duyệt không thể giúp mô hình này hoạt động vượt quá một cấp của DOM bóng.

Do đó, bộ kết hợp con cháu đã bị xoá khỏi các thông số kỹ thuật liên quan, bao gồm cả DOM bóng v1. Thay vì phá vỡ các trang web bằng cách xoá bộ chọn này khỏi Chromium, chúng tôi đã chọn đặt bí danh trình kết hợp con cháu xuyên bóng cho trình kết hợp con cháu. Hành vi ban đầu đã không còn được dùng trong Chrome 45. Hành vi mới này sẽ được triển khai trong Chrome 61.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

JavaScript

Không dùng nữa và xoá RTCPeerConnection.getStreamById()

Gần 2 năm trước, getStreamById() đã bị xoá khỏi thông số kỹ thuật WebRTC. Hầu hết các trình duyệt khác đều đã xoá SDK này khỏi các quá trình triển khai. Mặc dù chức năng này được cho là sẽ ít được sử dụng, nhưng chúng cũng được cho là có một số rủi ro nhỏ về khả năng tương tác với các trình duyệt dựa trên Edge và Metric ngoài Safari nơi getStreamById() vẫn được hỗ trợ. Các nhà phát triển cần phương thức triển khai thay thế có thể tìm thấy mã ví dụ trong Intent to Remove (Ý định xoá) ở bên dưới.

Tính năng xoá có trong Chrome 62.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Ngừng sử dụng SVGPathElement.getPathSegAtLength

Hơn hai năm trước, getPathSegAtLength() đã bị xoá khỏi thông số kỹ thuật SVG. Vì chỉ có một số ít lượt truy cập cho phương thức này trong http lưu trữ, nên phương thức này sẽ không được dùng trong Chrome 60 nữa. Quá trình xoá dự kiến sẽ có trong Chrome 62, phiên bản này sẽ được giao vào đầu hoặc giữa tháng 10.

Ý định không dùng nữa | Công cụ theo dõi trạng thái Chrome | Lỗi Chromium

Di chuyển getContextAttributes() phía sau cờ

Hàm getContextAttributes() được hỗ trợ trên CanvasRenderingContext2D kể từ năm 2013. Tuy nhiên, tính năng này không thuộc bất kỳ tiêu chuẩn nào và không trở thành một phần của một tiêu chuẩn kể từ thời điểm đó. Phương thức này đáng lẽ được triển khai sau cờ dòng lệnh --enable-experimental-canvas-features, nhưng lại không được triển khai do nhầm lẫn. Trong Chrome 60, chế độ giám sát này đã được khắc phục. Thay đổi này được tin là an toàn vì không có dữ liệu nào cho thấy rằng bất cứ ai đang sử dụng phương thức này.

Lỗi Chromium

Xoá Headers.prototype.getAll()

Hàm Headers.prototype.getAll() đang bị xoá theo phiên bản mới nhất của Thông số kỹ thuật tìm nạp.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Xoá indexDB.webkitGetDatabaseNames()

Chúng tôi thêm tính năng này khi Cơ sở dữ liệu được lập chỉ mục còn khá mới trong Chrome và việc thêm tiền tố đã rất phổ biến. API trả về không đồng bộ danh sách các tên cơ sở dữ liệu hiện có trong một nguồn gốc, điều này có vẻ hợp lý.

Thật không may, thiết kế có thiếu sót, trong đó kết quả có thể lỗi thời ngay khi được trả về, vì vậy, công cụ này thực sự chỉ có thể được dùng để ghi nhật ký, chứ không phải logic ứng dụng nghiêm trọng. Vấn đề về github theo dõi/liên kết đến nội dung thảo luận trước đó về các phương án thay thế (yêu cầu một phương pháp khác). Mặc dù ngày càng nhận được nhiều sự quan tâm của các nhà phát triển, nhưng do thiếu tiến trình trên nhiều trình duyệt, vấn đề này đã được các tác giả thư viện giải quyết.

Các nhà phát triển cần chức năng này cần tự phát triển giải pháp của riêng mình. Ví dụ: các thư viện như Dexie.js sử dụng bảng chung. Bảng này chính là một cơ sở dữ liệu khác để theo dõi tên của cơ sở dữ liệu.

Tính năng này không được dùng trong Chrome 58 và hiện đã bị loại bỏ.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Xoá WEBKIT_KEYFRAMES_RULE và WEBKIT_KEYFRAME_RULE

Các hằng số WEBKIT_KEYFRAMES_RULEWEBKIT_KEYFRAME_RULE không chuẩn sẽ bị xoá khỏi Quy tắc CSS. Nhà phát triển nên sử dụng KEYFRAMES_RULEKEYFRAME_RULE.

Ý định xoá | Trình theo dõi trạng thái Chrome | Lỗi Chromium

Giao diện người dùng

Yêu cầu cử chỉ của người dùng đối với hộp thoại beforeunload

Từ Chrome 60 trở đi, hộp thoại beforeunload sẽ chỉ xuất hiện nếu khung tìm cách hiển thị đã nhận được cử chỉ của người dùng hoặc tương tác của người dùng (hoặc nếu bất kỳ khung nào được nhúng nhận được một cử chỉ như vậy). Xin làm rõ, đây không phải là thay đổi đối với việc gửi đi sự kiện beforeunload. Đây chỉ là một thay đổi về việc hộp thoại có hiển thị hay không.

Hộp thoại beforeunload là hộp thoại phương thức ứng dụng. Do đó, bản chất của API này vốn có tính thù địch với người dùng, nghĩa là nó phản hồi thao tác điều hướng của người dùng bằng cách đặt câu hỏi về quyết định của người dùng. Tính năng này có nhiều trường hợp sử dụng. Ví dụ: tính năng này thường được dùng để cảnh báo người dùng khi họ bị mất dữ liệu bằng cách điều hướng.

Mặc dù khả năng một trang cung cấp văn bản cho hộp thoại beforeunload đã bị xoá một thời gian trước, nhưng các hộp thoại beforeunload vẫn là một vectơ của hành vi lạm dụng. Cụ thể, các hộp thoại beforeunload là một thành phần của các trang web lừa đảo, trong đó tính năng tự động phát âm thanh và văn bản đe doạ đưa ra một ngữ cảnh khiến Chromium đưa ra thông báo "bạn có chắc chắn muốn rời khỏi trang này không" trở nên đáng lo ngại.

Chúng ta muốn luồn kim và chỉ cho phép các trường hợp sử dụng hợp lý hộp thoại beforeunload. Trường hợp sử dụng tốt hộp thoại là những trường hợp người dùng có trạng thái có thể bị mất. Nếu người dùng không bao giờ tương tác với trang, thì người dùng không thể có bất kỳ trạng thái nào có thể bị mất. Do đó, chúng tôi không có nguy cơ mất dữ liệu người dùng bằng cách chặn hộp thoại trong trường hợp đó.