Penghentian dan Penghapusan API di Chrome 54

Di hampir setiap versi Chrome, kami melihat sejumlah besar pembaruan dan peningkatan pada produk, kinerja, dan juga kemampuan Platform Web. Artikel ini menjelaskan penghentian penggunaan dan penghapusan di Chrome 54, yang masih dalam versi beta mulai 15 September. Daftar ini dapat berubah sewaktu-waktu.

Menonaktifkan navigasi di pengendali penghapusan muatan

TL;DR: Semua navigasi lintas asal tidak akan diizinkan di pengendali peristiwa window.onunload untuk menghadirkan Chrome secara inline dengan spesifikasi HTML serta Firefox dan Safari.

Intent untuk Menghapus | Pelacak Chromestatus | Bug Chromium

Chrome versi sebelumnya memungkinkan navigasi lintas asal terganggu di dalam window.onunload. dengan menyetel window.location.href = '#fragment'. Menurut spesifikasi HTML, hanya navigasi dalam halaman yang diizinkan di pengendali penghapusan muatan, dan di Chrome versi sebelumnya, metode navigasi lain diblokir sebagaimana diwajibkan oleh spesifikasi. Mulai Chrome 54, navigasi semacam itu tidak diizinkan untuk menyesuaikan dengan spesifikasi serta Firefox dan Safari.

HTTP/0.9 tidak digunakan lagi

TL;DR: HTTP/0.9 tidak digunakan lagi. Developer harus beralih ke versi yang lebih baru, terutama HTTP/2.

Intent untuk Menghapus | Pelacak Chromestatus | Bug Chromium

HTTP/0.9 adalah pendahulu HTTP/1.x. API ini tidak memiliki banyak fitur penggantinya. Permasalahan khusus untuk web modern adalah kurangnya header respons. Tanpa tanda kurung, tidak ada cara untuk memverifikasi bahwa respons HTTP/0.9 benar-benar respons HTTP/0.9. Hal ini dapat menyebabkan beberapa masalah. Contohnya mencakup, di antara masalah lainnya:

  • Klien yang memperlakukan respons error tertentu sebagai respons HTTP/0.9 yang valid.
  • Server yang gagal menutup soket permintaan yang menyebabkan klien memperlakukan respons sebagai GET yang macet yang akan tetap aktif selamanya atau hingga pengguna membuka dari halaman yang membuat permintaan.
  • Server yang tidak dapat menunjukkan ke browser bahwa permintaan gagal, yang dapat menyebabkan masalah dengan heuristik cache.

Satu-satunya cara yang sangat mudah untuk memperbaiki masalah dengan HTTP/0.9 adalah dengan menghapus dukungan sepenuhnya. Itulah sebabnya dukungan untuk HTTP/0.9 dihapus di Chrome 54.

Penggunaan initTouchEvent dihapus

TL;DR: initTouchEvent tidak digunakan lagi dan digantikan dengan TouchEvent constructor untuk meningkatkan kepatuhan spesifikasi dan akan dihapus sepenuhnya di Chrome 54.

Intent untuk Menghapus | Pelacak Chromestatus | Bug Chromium

Developer telah lama dapat membuat peristiwa sentuh sintetis di Chrome menggunakan initTouchEvent API. Objek ini sering digunakan untuk menyimulasikan Peristiwa Sentuh untuk pengujian atau otomatisasi beberapa UI di situs Anda. Sejak Chrome 49, API yang sudah tidak digunakan lagi ini menampilkan peringatan berikut .

Peringatan Peristiwa Sentuh
TouchEvent.initTouchEvent tidak digunakan lagi dan akan dihapus di M53, sekitar September 2016. Sebagai gantinya, gunakan konstruktor TouchEvent. Lihat https://www.chromestatus.com/features/5730982598541312 untuk mengetahui detail selengkapnya.

Selain tidak disertakan dalam spesifikasi Peristiwa Sentuh, ada sejumlah alasan mengapa perubahan ini bagus. Implementasi Chrome initTouchEvent sama sekali tidak kompatibel dengan initTouchEvent API Safari dan berbeda dengan Firefox di Android. Dan terakhir, konstruktor TouchEvent jauh lebih mudah digunakan.

Karena alasan ini, kami memutuskan untuk mengikuti spesifikasi tersebut daripada mempertahankan API yang tidak ditentukan atau tidak kompatibel dengan satu-satunya implementasi lain. Developer yang memerlukan alternatif harus menggunakan konstruktor TouchEvent.

Karena implementasi iOS dan Android/Chrome dari initTouchEvent API sangat berbeda, situs sering kali memiliki kode di sepanjang baris (sering melupakan 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);

Ini buruk karena mencari "Android" di Agen Pengguna dan Chrome di Android akan cocok dan mencapai penghentian ini. API ini belum dapat dihapus karena akan ada browser berbasis WebKit dan Blink lama lainnya di Android untuk sementara waktu, dan Anda masih harus mendukung API lama.

Untuk menangani TouchEvent di web dengan benar, Anda harus mengubah kode untuk mendukung Firefox, IE Edge, dan Chrome dengan memeriksa keberadaan TouchEvent pada objek window dan apakah memiliki "panjang" positif (menunjukkan bahwa konstruktor yang mengambil argumen), Anda harus menggunakannya.

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

Atribut KeyboardEvent.keyIdentifier dihapus

TL;DR: Properti keyboardEvent.keyIdentifier yang sedikit didukung akan dihapus dan diganti dengan properti KeyboardEvent.key berbasis standar.

Intent untuk Menghapus | Pelacak Chromestatus | Bug Chromium

Atribut keyboardEvent.keyIdentifier sempat menjadi bagian dari spesifikasi W3C pada tahun 2009 dan 2010. Namun, hal ini hanya diimplementasikan di WebKit.

Developer yang perlu mengganti atribut ini dapat menggunakan properti KeyboardEvent.key berbasis standar atau properti KeyboardEvent.code (seperti yang dijelaskan dalam artikel yang kami lakukan musim semi lalu). Mode pertama memiliki basis implementasi terluas, yang didukung di semua browser desktop utama kecuali Safari. Versi terbaru saat ini didukung di Chrome, Firefox, dan Opera. Menghapus fitur ini bertujuan untuk mendorong penggunaan properti KeyboardEvent.key. Tidak ada informasi dari Apple apakah akan mendukung fitur ini atau tidak. Namun, properti KeyboardEvent.keyCode dan KeyboardEvent.charCode yang tidak digunakan lagi (tetapi belum dihapus dari Chrome) masih tersedia di Safari.

Menghapus atribut dan peristiwa berakhir MediaStream serta atribut yang diaktifkan

TL;DR: Peristiwa dan atribut ended serta pengendali peristiwa onended dihapus karena telah dihapus dari spesifikasi Media Capture dan Stream.

Intent untuk Menghapus | Pelacak Chromestatus | Bug Chromium

Baik peristiwa ended maupun pengendali peristiwa onended tidak menjadi bagian dari spesifikasi WebRTC selama sekitar tiga tahun. Developer yang ingin menonton peristiwa harus menggunakan MediaStreamTracks, bukan MediaStreams.

Menghentikan penggunaan SVGSVGElement.viewPort

Implementasi ini tidak berfungsi di Chrome sejak 2012. Atribut tidak ada sama sekali di browser lain dan telah dihapus dari spesifikasi. Oleh karena itu, properti ini tidak digunakan lagi. Penghapusan diperkirakan akan terjadi di Chrome 55.

Intent untuk Menghapus | Pelacak Chromestatus | Bug Chromium

Menghentikan penggunaan SVGViewElement.viewTarget

Atribut SVGViewElement.viewTarget bukan bagian dari spesifikasi SVG2.0 dan penggunaannya kecil atau tidak ada. Atribut ini tidak digunakan lagi di Chrome 54. Penghapusan diperkirakan akan terjadi di Chrome 56.

Intent untuk Menghapus | Pelacak Chromestatus | Bug Chromium

Menghapus SVGZoomEvent

SVGZoomEvent bukan bagian dari spesifikasi SVG2.0 dan tidak berfungsi di Chromium. Meskipun demikian, fitur ini masih dapat dideteksi, yang menyebabkan potensi kebingungan oleh developer. Properti tersebut akan dihapus.

Intent untuk Menghapus | Pelacak Chromestatus | Bug Chromium