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

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

Tắt các thao tác điều hướng trong trình xử lý huỷ tải

Tóm tắt: Tất cả các thao tác điều hướng trên nhiều nguồn gốc sẽ không được phép trong trình xử lý sự kiện window.onunload để Chrome tuân thủ quy cách HTML cũng như Firefox và Safari.

Ý định xoá | Chromestatus Tracker | Chromium Bug

Các phiên bản Chrome trước đây cho phép thao tác điều hướng trên nhiều nguồn gốc bị gián đoạn bên trong window.onunload. bằng cách đặt window.location.href = '#fragment'. Theo quy cách HTML, chỉ những thao tác điều hướng trong trang mới được phép thực hiện trong trình xử lý unload và trong các phiên bản Chrome trước đây, những phương thức điều hướng khác đều bị chặn theo yêu cầu của quy cách. Kể từ Chrome 54, những thao tác điều hướng như vậy sẽ không được phép để chúng tôi tuân thủ quy cách cũng như Firefox và Safari.

HTTP/0.9 không được dùng nữa

Tóm tắt: HTTP/0.9 không được dùng nữa. Nhà phát triển nên chuyển sang phiên bản mới hơn, tốt nhất là HTTP/2.

Ý định xoá | Chromestatus Tracker | Chromium Bug

HTTP/0.9 là phiên bản tiền nhiệm của HTTP/1.x. Thiếu nhiều tính năng của các phiên bản sau. Một vấn đề cụ thể đối với web hiện đại là việc thiếu tiêu đề phản hồi. Nếu không có các tiêu đề này, bạn sẽ không thể xác minh rằng phản hồi HTTP/0.9 thực sự là phản hồi HTTP/0.9. Điều này có thể gây ra một số vấn đề. Ví dụ:

  • Những ứng dụng coi một số phản hồi lỗi nhất định là phản hồi HTTP/0.9 hợp lệ.
  • Những máy chủ không đóng ổ cắm yêu cầu khiến các ứng dụng coi phản hồi là một yêu cầu GET treo, tồn tại vĩnh viễn hoặc cho đến khi người dùng chuyển hướng khỏi trang đã đưa ra yêu cầu.
  • Những máy chủ không thể cho trình duyệt biết rằng một yêu cầu không thành công, điều này có thể gây ra vấn đề với phương pháp phỏng đoán lưu vào bộ nhớ đệm.

Cách duy nhất để khắc phục triệt để các vấn đề với HTTP/0.9 là loại bỏ hoàn toàn tính năng hỗ trợ này. Đó là lý do khiến Chrome 54 không còn hỗ trợ HTTP/0.9.

Đã xoá việc sử dụng initTouchEvent

Tóm tắt: initTouchEvent đã ngừng hoạt động để thay thế bằng TouchEvent constructor nhằm cải thiện khả năng tuân thủ quy cách và sẽ bị loại bỏ hoàn toàn trong Chrome 54.

Ý định xoá | Chromestatus Tracker | Chromium Bug

Trong một thời gian dài, các nhà phát triển đã có thể tạo sự kiện chạm giả tạo trong Chrome bằng cách sử dụng API initTouchEvent. Các sự kiện này thường được dùng để mô phỏng Sự kiện chạm cho mục đích kiểm thử hoặc tự động hoá một số giao diện người dùng trên trang web của bạn. Kể từ Chrome 49, API không dùng nữa này đã hiển thị cảnh báo sau .

Cảnh báo sự kiện chạm
TouchEvent.initTouchEvent không còn được dùng nữa và sẽ bị xoá trong M53, vào khoảng tháng 9 năm 2016. Thay vào đó, vui lòng sử dụng hàm khởi tạo TouchEvent. Xem tại https://www.chromestatus.com/features/5730982598541312 để biết thêm thông tin chi tiết.

Ngoài việc không có trong quy cách Sự kiện chạm, có một số lý do khiến thay đổi này là cần thiết. Việc triển khai initTouchEvent của Chrome hoàn toàn không tương thích với API initTouchEvent của Safari và khác với Firefox trên Android. Và cuối cùng, hàm khởi tạo TouchEvent dễ sử dụng hơn nhiều.

Vì những lý do này, chúng tôi quyết định tuân theo quy cách thay vì duy trì một API không được chỉ định và không tương thích với việc triển khai duy nhất khác. Những nhà phát triển cần một lựa chọn thay thế nên sử dụng hàm khởi tạo TouchEvent.

Vì việc triển khai initTouchEvent API trên iOS và Android/Chrome khác nhau rất nhiều, nên các trang web thường có mã theo kiểu (thường quên 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);

Điều này không tốt vì nó tìm kiếm "Android" trong User-Agent và Chrome trên Android sẽ khớp và gặp phải trường hợp không dùng nữa này. Tuy nhiên, bạn chưa thể xoá API này vì sẽ có những trình duyệt khác dựa trên WebKit và Blink cũ trên Android mà bạn vẫn cần hỗ trợ API cũ.

Để xử lý chính xác TouchEvent trên web, bạn nên thay đổi mã để hỗ trợ Firefox, IE Edge và Chrome bằng cách kiểm tra sự tồn tại của TouchEvent trên đối tượng window và nếu đối tượng này có "độ dài" dương (cho biết đây là một hàm khởi tạo nhận đối số), bạn nên sử dụng hàm khởi tạo đó.

    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);

Đã xoá thuộc tính KeyboardEvent.keyIdentifier

Tóm tắt: Chúng tôi sẽ xoá thuộc tính keyboardEvent.keyIdentifier ít được hỗ trợ và thay bằng thuộc tính KeyboardEvent.key dựa trên tiêu chuẩn.

Ý định xoá | Chromestatus Tracker | Chromium Bug

Thuộc tính keyboardEvent.keyIdentifier từng là một phần của quy cách W3C trong giai đoạn 2009 – 2010. Tuy nhiên, tính năng này chỉ được triển khai trong WebKit.

Những nhà phát triển cần thay thế thuộc tính này có thể sử dụng thuộc tính KeyboardEvent.key dựa trên tiêu chuẩn hoặc thuộc tính KeyboardEvent.code (như mô tả trong một bài viết chúng tôi đã thực hiện vào mùa xuân năm ngoái). Loại trước có cơ sở triển khai rộng nhất, được hỗ trợ trên tất cả trình duyệt chính dành cho máy tính, ngoại trừ Safari. Sau này được hỗ trợ trên Chrome, Firefox và Opera. Việc xoá tính năng này nhằm thúc đẩy việc sử dụng tài sản KeyboardEvent.key. Apple chưa đưa ra thông tin nào về việc có hỗ trợ thuộc tính này hay không; tuy nhiên, các thuộc tính KeyboardEvent.keyCodeKeyboardEvent.charCode cũng đã ngừng hoạt động (nhưng chưa bị xoá khỏi Chrome) vẫn có trên Safari.

Xoá sự kiện và thuộc tính MediaStream đã kết thúc cũng như thuộc tính onended

Tóm tắt: Sự kiện và thuộc tính ended cũng như trình xử lý sự kiện onended sẽ bị xoá vì chúng đã bị xoá khỏi đặc tả Media Capture and Streams.

Ý định xoá | Chromestatus Tracker | Chromium Bug

Cả sự kiện ended và trình xử lý sự kiện onended đều không thuộc quy cách WebRTC trong khoảng 3 năm. Nhà phát triển muốn theo dõi các sự kiện nên dùng MediaStreamTracks thay vì MediaStreams.

Ngừng sử dụng SVGSVGElement.viewPort

Việc triển khai này không hoạt động trong Chrome kể từ năm 2012. Thuộc tính này hoàn toàn không có trong các trình duyệt khác và đã bị xoá khỏi quy cách. Vì những lý do này, thuộc tính này sẽ không được dùng nữa. Dự kiến sẽ xoá trong Chrome 55.

Ý định xoá | Chromestatus Tracker | Chromium Bug

Ngừng sử dụng SVGViewElement.viewTarget

Thuộc tính SVGViewElement.viewTarget không thuộc quy cách SVG 2.0 và ít được sử dụng hoặc không được sử dụng. Thuộc tính này không được dùng nữa trong Chrome 54. Dự kiến sẽ xoá trong Chrome 56.

Ý định xoá | Chromestatus Tracker | Chromium Bug

Xoá SVGZoomEvent

SVGZoomEvent không thuộc quy cách SVG 2.0 và không hoạt động trong Chromium. Mặc dù vậy, tính năng này vẫn có thể phát hiện được, dẫn đến việc các nhà phát triển có thể nhầm lẫn. Ảnh sẽ bị xoá.

Ý định xoá | Chromestatus Tracker | Chromium Bug