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

Trong hầu hết mọi phiên bản Chrome, chúng tôi đều thấy có nhiều bản cập nhật và cải tiến đáng kể về sản phẩm, hiệu suất cũng như các tính năng của nền tảng web.

Trong Chrome 50 (Ngày thử nghiệm beta ước tính: ngày 10 đến ngày 17 tháng 3), có một số thay đổi đối với Chrome. Danh sách này có thể thay đổi bất cứ lúc nào.

Ngừng sử dụng AppCache đối với các bối cảnh không an toàn

Tóm tắt: Để hạn chế việc viết tập lệnh trên nhiều trang web, chúng tôi sẽ không dùng AppCache trên các nguồn gốc không an toàn. Chúng tôi dự kiến trong Chrome 52, tính năng này sẽ chỉ hoạt động trên các nguồn gốc phân phát nội dung qua HTTPS.

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

AppCache là một tính năng cho phép truy cập ngoại tuyến và liên tục vào một nguồn gốc. Đây là tính năng nâng cao đặc quyền mạnh mẽ cho các cuộc tấn công tập lệnh trên nhiều trang web. Là một phần trong nỗ lực lớn hơn nhằm xoá các tính năng mạnh mẽ trên các nguồn gốc không an toàn.

Chrome đang loại bỏ vectơ tấn công này bằng cách chỉ cho phép vectơ này qua HTTPS. Chúng tôi sẽ ngừng hỗ trợ HTTP trong Chrome 50 và dự kiến sẽ loại bỏ hoàn toàn tính năng này trong Chrome 52.

Document.defaultCharset đã bị xoá

Tóm tắt: document.defaultCharset đã bị xoá để cải thiện việc tuân thủ thông số kỹ thuật.

Ý định xoá | Trình theo dõi trạng thái Chrome | Vấn đề về CRBug

Ngừng sử dụng trong Chrome 49: document.defaultCharset là một thuộc tính chỉ có thể đọc. Thuộc tính này trả về chế độ mã hoá ký tự mặc định của hệ thống người dùng dựa trên chế độ cài đặt khu vực của họ. Việc duy trì giá trị này không hữu ích do cách các trình duyệt sử dụng thông tin mã hoá ký tự trong Phản hồi HTTP hoặc trong thẻ meta được nhúng trên trang.

Thay vào đó, hãy sử dụng document.characterSet để nhận giá trị đầu tiên được chỉ định trong tiêu đề HTTP. Nếu không có giá trị đó thì bạn sẽ nhận được giá trị được chỉ định trong thuộc tính charset của phần tử <meta> (ví dụ: <meta charset="utf-8">). Cuối cùng, nếu không có giá trị nào trong số đó, document.characterSet sẽ là chế độ cài đặt hệ thống của người dùng.

Bạn có thể đọc thêm nội dung thảo luận về lý do không nêu rõ điều này trong vấn đề trên github này

Tóm tắt: Xoá tính năng hỗ trợ giá trị subresource cho thuộc tính rel của HTMLLinkElement.

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

Ý định của thuộc tính subresource trên <link> là tìm nạp trước một tài nguyên trong thời gian không hoạt động của trình duyệt. Sau khi tải một trang xuống, trình duyệt có thể tải trước các tài nguyên (chẳng hạn như các trang khác) để khi người dùng yêu cầu, chúng có thể được truy xuất từ bộ nhớ đệm của trình duyệt.

Thuộc tính subresource gặp phải một số vấn đề. Thứ nhất, tính năng này không bao giờ hoạt động như dự kiến. Các tài nguyên tham chiếu đã được tải xuống với mức độ ưu tiên thấp. Thuộc tính này chưa từng được triển khai trên bất kỳ trình duyệt nào khác ngoài Chrome. Quá trình triển khai Chrome đã gặp lỗi khiến các tài nguyên được tải xuống hai lần.

Các nhà phát triển muốn cải thiện trải nghiệm người dùng thông qua việc tải trước nội dung có một số tuỳ chọn, trong đó có nhiều lựa chọn nhất là xây dựng một trình chạy dịch vụ để tận dụng tính năng lưu trước và API của Bộ nhớ đệm. Các giải pháp bổ sung bao gồm các giá trị khác cho thuộc tính rel, bao gồm preconnect, prefetch, preload, prerender. Một số tuỳ chọn trong số này đang trong giai đoạn thử nghiệm và có thể không được hỗ trợ rộng rãi.

Xoá bản dự phòng cho phiên bản TLS (Bảo mật tầng truyền tải) không an toàn

Tóm tắt: Xoá cơ chế buộc máy chủ trả về dữ liệu bằng các phiên bản TLS kém an toàn hoặc không bảo mật.

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

Bảo mật tầng truyền tải (TLS) hỗ trợ cơ chế thương lượng các phiên bản, cho phép giới thiệu các phiên bản TLS mới mà không làm hỏng khả năng tương thích. Một số máy chủ triển khai phương thức này theo cách mà các trình duyệt bắt buộc phải dùng điểm cuối không an toàn làm phương án dự phòng. Do đó, những kẻ tấn công có thể buộc bất kỳ trang web nào, chứ không chỉ những trang web được định cấu hình không chính xác, phải thương lượng cho các phiên bản TLS yếu hơn.

Các trang web bị ảnh hưởng sẽ không kết nối được với ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION. Quản trị viên cần đảm bảo phần mềm máy chủ của họ là phiên bản mới nhất. Nếu vẫn chưa giải quyết được vấn đề, hãy liên hệ với nhà cung cấp phần mềm máy chủ để xem có bản sửa lỗi nào không.

Xoá KeyboardEvent.prototype.keyLocation

TL;DR: Xoá bí danh không cần thiết cho thuộc tính Keyboard.prototype.location.

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

Thuộc tính này chỉ đơn giản là đại diện của thuộc tính Keyboard.prototype.location, cho phép phân định giữa các phím nằm ở nhiều vị trí trên bàn phím. Ví dụ: cả hai thuộc tính đều cho phép nhà phát triển phân biệt giữa 2 phím Enter trên bàn phím mở rộng.

Cần có trình xử lý lỗi và thành công trong phương thức RTCPeerConnection

TL;DR: Phương thức WebRTC RTCPeerConnection createOffer()createAnswer() hiện cần có một trình xử lý lỗi cũng như một trình xử lý thành công. Trước đây, bạn có thể gọi các phương thức này chỉ bằng một trình xử lý thành công. Phương thức sử dụng đó không còn được dùng nữa.

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

Trong Chrome 49, chúng tôi đã thêm một cảnh báo nếu bạn gọi setLocalDescription() hoặc setRemoteDescription() mà không cung cấp trình xử lý lỗi. Kể từ Chrome 50, bạn bắt buộc phải sử dụng đối số của trình xử lý lỗi.

Đây là một phần trong việc mở đường cho việc giới thiệu lời hứa về các phương thức này, theo yêu cầu của thông số kỹ thuật WebRTC.

Dưới đây là ví dụ từ bản minh hoạ RTCPeerConnection của WebRTC (main.js, dòng 126):

    function onCreateOfferSuccess(desc) {
      pc1.setLocalDescription(desc, function() {
         onSetLocalSuccess(pc1);
      }, onSetSessionDescriptionError);
      pc2.setRemoteDescription(desc, function() {
        onSetRemoteSuccess(pc2);
      }, onSetSessionDescriptionError);
      pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
    }

Xin lưu ý rằng cả setLocalDescription()setRemoteDescription() đều có trình xử lý lỗi. Các trình duyệt cũ hơn mong đợi chỉ có trình xử lý thành công sẽ chỉ bỏ qua đối số trình xử lý lỗi nếu có; việc gọi mã này trong trình duyệt cũ hơn sẽ không gây ra ngoại lệ.

Nhìn chung, đối với các ứng dụng WebRTC phát hành chính thức, bạn nên dùng adapter.js, một miếng đệm, do dự án WebRTC duy trì, để giúp tách biệt ứng dụng khỏi các thay đổi về thông số kỹ thuật và sự khác biệt về tiền tố.

XMLHttpRequestProgressEvent không còn được hỗ trợ nữa

Tóm tắt: Giao diện XMLHttpRequestProgressEvent sẽ bị xoá, cùng với các thuộc tính positiontotalSize.

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

Sự kiện này tồn tại để hỗ trợ các thuộc tính tương thích với Gecko positiontotalSize. Chúng tôi đã ngừng hỗ trợ cả ba tính năng này trong Mozilla 22 và đã thay thế chức năng này từ lâu bằng 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
        }
      }

Xoá Tiện ích phương tiện đã mã hoá có tiền tố

Tóm tắt: Các tiện ích đa phương tiện được mã hoá có tiền tố đã bị xoá và thay vào đó là một tiện ích thay thế dựa trên thông số kỹ thuật, chưa có tiền tố.

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

Trong Chrome 42, chúng tôi đã cung cấp một phiên bản tiện ích đa phương tiện được mã hoá dựa trên thông số kỹ thuật, chưa có tiền tố. API này dùng để khám phá, chọn và tương tác với các hệ thống Quản lý quyền kỹ thuật số để sử dụng với HTMLMediaElement.

Đó là gần một năm trước. Và vì phiên bản không có tiền tố có nhiều khả năng hơn so với phiên bản có tiền tố, đã đến lúc xoá phiên bản có tiền tố của API.

Xoá tính năng hỗ trợ cho thuộc tính SVGElement.offset

TL;DR: Các thuộc tính chênh lệch cho SVGElement đã bị loại bỏ và thay vào đó là các thuộc tính được hỗ trợ rộng rãi hơn trên HTMLElement.

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

Từ lâu, cả HTMLElementSVGElement đã hỗ trợ các thuộc tính chênh lệch. Tuy nhiên, Gecko và Edge chỉ hỗ trợ các thuộc tính này trên HTMLElement. Để cải thiện tính nhất quán giữa các trình duyệt, các thuộc tính này không còn được dùng trong Chrome 48 và hiện đang bị xoá.

Mặc dù các thuộc tính tương đương là một phần của HTMLElement, nhưng các nhà phát triển đang tìm kiếm giải pháp thay thế cũng có thể sử dụng getBoundingClientRect()