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

Trong hầu hết mọi phiên bản của Chrome, chúng tôi nhận thấy sản phẩm có nhiều bản cập nhật và cải tiến đáng kể, 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á bỏ trong Chrome 54 (đang trong giai đoạn thử nghiệm beta vào ngày 15 tháng 9). Danh sách này có thể thay đổi bất cứ lúc nào.

Tắt tính năng điều hướng trong trình xử lý huỷ tải

Tóm tắt: Tất cả hoạt động điều hướng giữa nhiều nguồn gốc sẽ không được phép trong các trình xử lý sự kiện window.onunload để kết nối Chrome với thông số kỹ thuật HTML cũng như Firefox và Safari.

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

Các phiên bản trước của Chrome cho phép việc điều hướng giữa 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 thông số kỹ thuật về HTML, chỉ các thao tác điều hướng trong trang mới được phép trong trình xử lý huỷ tải. Trong các phiên bản trước của Chrome, các phương thức điều hướng khác đã bị chặn theo yêu cầu của quy cách. Kể từ Chrome 54, các thao tác điều hướng như vậy sẽ không được phép để chúng tôi phù hợp với quy cách cũng như Firefox và Safari.

HTTP/0.9 không 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á | Trình theo dõi trạng thái Chrome | Lỗi Chromium

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

  • Các máy khách coi một số phản hồi lỗi nhất định là phản hồi HTTP/0.9 hợp lệ.
  • Máy chủ không đóng được ổ cắm yêu cầu, khiến ứng dụng coi phản hồi là một GET bị treo và tồn tại vĩnh viễn hoặc cho đến khi người dùng di chuyển khỏi một trang đã gửi yêu cầu.
  • Những máy chủ không thể báo 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 sự cố với phương pháp phỏng đoán khi lưu vào bộ nhớ đệm.

Cách duy nhất để khắc phục vấn đề với HTTP/0.9 chính xác nhất là ngừng hỗ trợ hoàn toàn. Đó là lý do tại sao Chrome 54 không hỗ trợ HTTP/0.9.

Đã xoá quyền sử dụng initTouchEvent

Tóm tắt: Chúng tôi đã ngừng sử dụng initTouchEvent và thay vào đó là TouchEvent constructor để cải thiện việc tuân thủ thông số kỹ thuật và sẽ bị xoá hoàn toàn trong Chrome 54.

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

Từ lâu, các nhà phát triển đã có thể tạo các sự kiện chạm tổng hợp 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 các Sự kiện chạm nhằm mục đích thử nghiệm 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 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 https://www.chromestatus.com/features/5730982598541312 để biết thêm chi tiết.

Ngoài việc không thuộc thông số Sự kiện chạm, có một số lý do khiến thay đổi này phù hợp. Việc triển khai Chrome của initTouchEvent không tương thích chút nào với API initTouchEvent của Safari và khác với Firefox trên Android. Cuối cùng, hàm khởi tạo TouchEvent sẽ 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 suy đoán cũng như không tương thích với phương thức triển khai duy nhất khác. Các nhà phát triển cần có phương án thay thế nên dùng hàm khởi tạo TouchEvent.

Vì cách triển khai API initTouchEvent trên iOS và Android/Chrome rất khác nhau, nên các trang web thường sẽ có mã theo các dòng (thường xuyên 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 là không tốt vì tính năng này tìm kiếm "Android" trong Tác nhân người dùng và Chrome trên Android sẽ khớp và ngừng sử dụng. Tuy nhiên, chưa thể xoá nó vì trong một khoảng thời gian, sẽ có các trình duyệt ngoại số và trình duyệt dựa trên Blink cũ hơn trên Android mà bạn vẫn sẽ cần phải hỗ trợ API cũ.

Để xử lý chính xác cá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à xem đối tượng có "độ dài" dương hay không (cho biết đó là hàm khởi tạo cần đối số), bạn nên sử dụng đối tượng đó.

    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: Tài sản keyboardEvent.keyIdentifier ít được hỗ trợ sẽ bị xoá và được thay thế bằng tài sản KeyboardEvent.key dựa trên tiêu chuẩn.

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

Thuộc tính keyboardEvent.keyIdentifier từng là một phần của quy cách W3C trong các năm 2009 và 2010. Tuy nhiên, tính năng này chỉ được triển khai trong Tin nhắn theo thời gian thực.

Các 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ư được mô tả trong bài viết mà chúng tôi thực hiện vào mùa xuân năm ngoái). Trình duyệt trước có cơ sở triển khai rộng nhất và đượ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. Các phiên bản mới hơn hiện được hỗ trợ trên Chrome, Firefox và Opera. Việc xoá tính năng này nhằm tăng tỷ lệ sử dụng tài sản KeyboardEvent.key. Apple chưa đưa ra thông báo về việc liệu có hỗ trợ tính năng này hay không. Tuy nhiên, các thuộc tính KeyboardEvent.keyCodeKeyboardEvent.charCode (đã ngừng hoạt động nhưng chưa bị xoá khỏi Chrome) vẫn hoạt động trên Safari.

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

Tóm tắt: Sự kiện và thuộc tính ended cũng như trình xử lý sự kiện onended đang bị xoá vì đã bị xoá khỏi thông số kỹ thuật của Media Capture và Streaming.

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

Cả sự kiện ended và trình xử lý sự kiện onended đều không thuộc thông số kỹ thuật WebRTC trong khoảng 3 năm. Các nhà phát triển muốn xem sự kiện nên sử dụng MediaStreamTracks thay vì MediaStreams.

Ngừng sử dụng SVGElement.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 xuất hiện trong các trình duyệt khác và đã bị xoá khỏi phần thông số kỹ thuật. Vì những lý do này, tài sản này không được dùng nữa. Loại bỏ được dự kiến trong Chrome 55.

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

Ngừng sử dụng SVGViewElement.viewTarget

Thuộc tính SVGViewElement.viewTarget không thuộc quy cách SVG2.0 và có mức sử dụng nhỏ hoặc không tồn tại. Thuộc tính này không được dùng trong Chrome 54 nữa. Loại bỏ được dự kiến trong Chrome 56.

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

Xoá SVGZoomEvent

SVGZoomEvent không thuộc quy cách SVG2.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, khiến các nhà phát triển có thể nhầm lẫn. Nội dung đó sẽ bị xóa.

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