Penghentian dan Penghapusan API di Chrome 49

Di hampir setiap versi Chrome, kami mendapatkan sejumlah update dan peningkatan yang signifikan pada produk, performanya, dan juga kemampuan platform web.

Di Chrome 49 (2 Februari 2016 Beta. Perkiraan tanggal stabil: Maret 2016) ada sejumlah perubahan pada Chrome

Penggunaan awalan "css" di getComputedStyle(e.cssX tidak digunakan lagi

TL;DR: Penggunaan awalan "css" di getComputedStyle(e) tidak digunakan lagi karena bukan bagian dari spec formal.

getComputedStyle adalah fungsi kecil yang bagus. Tindakan ini akan menampilkan semua nilai CSS gaya elemen DOM seperti yang telah dihitung oleh mesin rendering. Jadi, misalnya, Anda dapat menjalankan getComputedStyle(_someElement_).height dan mungkin menampilkan 224,1 piksel karena itu adalah tinggi elemen seperti yang saat ini ditampilkan.

Tampaknya API ini cukup berguna. Jadi, apa yang kita ubah?

Sebelum mesin rendering Chrome berubah menjadi Blink, mesin ini didukung oleh WebKit dan yang memungkinkan Anda menambahkan awalan "css" ke awal properti. Misalnya, getComputedStyle(e).cssHeight, bukan getComputedStyle(e).height. Keduanya akan menampilkan data yang sama seperti yang dipetakan ke nilai dasar yang sama, tetapi penggunaan awalan "css" inilah yang tidak standar dan tidak digunakan lagi serta dihapus.

Catatan - cssFloat adalah properti standar dan tidak terpengaruh oleh penghentian ini.

Jika Anda mengakses properti dengan cara ini di Chrome 49, properti tersebut akan menampilkan undefined dan Anda harus memperbaiki kode.

Penggunaan initTouchEvent tidak digunakan lagi

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

Rencana Penghapusan Pelacak Status Chrome Masalah CRBug

Sejak lama Anda dapat membuat peristiwa sentuh sintetis di Chrome menggunakan initTouchEvent API, peristiwa ini sering digunakan untuk menyimulasikan Peristiwa Sentuh baik untuk pengujian maupun otomatisasi beberapa UI di situs Anda. Di Chrome 49, kami telah menghentikan API ini dan akan menampilkan peringatan berikut dengan tujuan untuk menghapusnya sepenuhnya di Chrome 53.

'TouchEvent.initTouchEvent' tidak digunakan lagi dan akan dihapus di M53, 
    sekitar September 2016. Sebagai gantinya, gunakan konstruktor TouchEvent.
'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.

Ada sejumlah alasan mengapa perubahan ini bagus. Ini juga tidak ada dalam spesifikasi Peristiwa Sentuh. 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.

Diputuskan bahwa kami akan mengikuti spesifikasi ini, bukan mempertahankan API yang tidak ditentukan atau tidak kompatibel dengan satu-satunya implementasi lain. Oleh karena itu, pertama-tama kami menghentikan penggunaan lalu menghapus fungsi initTouchEvent dan mewajibkan developer menggunakan konstruktor TouchEvent.

API ini digunakan di Web, tetapi kami menyadari bahwa API ini digunakan oleh jumlah situs yang relatif rendah sehingga kami tidak menghapusnya secepat biasanya. Kami yakin bahwa beberapa penggunaan ini tidak berfungsi karena situs tidak menangani tanda tangan versi Chrome.

Karena implementasi iOS dan Android/Chrome dari initTouchEvent API sangat berbeda, Anda akan sering memiliki beberapa 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);

Pertama, ini buruk karena mencari "Android" di Agen Pengguna dan Chrome di Android akan mencocokkan 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 TouchEvents 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 memerlukan 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);

Pengendali error dan keberhasilan diperlukan dalam metode RTCPeerConnection

TL;DR: Metode RTCPeerConnection WebRTC createOffer() dan createAnswer() sekarang memerlukan pengendali error serta pengendali yang berhasil. Sebelumnya, metode ini dapat dipanggil hanya dengan pengendali yang berhasil. Penggunaan tersebut tidak digunakan lagi.

Di Chrome 49, kami juga telah menambahkan peringatan jika Anda memanggil setLocalDescription() atau setRemoteDescription() tanpa menyediakan pengendali error. Kami berharap agar argumen pengendali error wajib ada untuk metode ini di Chrome 50.

Ini merupakan bagian dari pembersihan cara untuk memperkenalkan promise pada metode ini, seperti yang diperlukan oleh spesifikasi WebRTC.

Berikut ini contoh dari demo RTCPeerConnection WebRTC (main.js, baris 126):

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

Perhatikan bahwa setLocalDescription() dan setRemoteDescription() selalu memiliki parameter pengendali error, jadi cukup menentukan parameter tersebut adalah perubahan yang aman.

Secara umum, untuk aplikasi WebRTC produksi, sebaiknya gunakan adapter.js, shim, yang dikelola oleh project WebRTC, untuk melindungi aplikasi dari perubahan spesifikasi dan perbedaan awalan.

Document.defaultCharset tidak digunakan lagi

TL;DR: Document.defaultCharset tidak digunakan lagi untuk meningkatkan kepatuhan spesifikasi.

Rencana Penghapusan Pelacak Status Chrome Masalah CRBug

Document.defaultCharset adalah properti hanya baca yang menampilkan encoding karakter default dari sistem pengguna berdasarkan setelan regionalnya. Mempertahankan nilai ini tidaklah berguna karena cara browser menggunakan informasi encoding karakter dalam Respons HTTP atau dalam tag meta yang disematkan pada halaman.

Dengan menggunakan document.characterSet, Anda akan mendapatkan nilai pertama yang ditentukan pada header HTTP. Jika tidak ada, Anda akan mendapatkan nilai yang ditentukan dalam atribut charset dari elemen <meta> (misalnya, <meta charset="utf-8">). Terakhir, jika tidak ada satu pun opsi yang tersedia, document.characterSet akan menjadi setelan sistem pengguna.

Gecko belum mendukung properti ini dan properti ini tidak ditentukan dengan rapi sehingga properti ini tidak akan digunakan lagi dari Blink di Chrome 49 (Beta pada Januari 2016). Peringatan berikut akan muncul di konsol Anda hingga properti tersebut dihapus di Chrome 50:

&#39;Document.defaultCharset&#39; sudah tidak digunakan lagi dan akan dihapus di M50, sekitar
    April 2016.
'Document.defaultCharset' sudah tidak digunakan lagi dan akan dihapus di M50, sekitar April 2016. Lihat https://www.chromestatus.com/features/6217124578066432 untuk mengetahui detail selengkapnya.

Diskusi lebih lanjut tentang alasan untuk tidak menentukan hal ini dapat dibaca di github https://github.com/whatwg/dom/issues/58

getStorageUpdates() dihapus

TL;DR: Navigator.getStorageUpdates() telah dihapus karena tidak lagi ada dalam spesifikasi Navigator.

Rencana Penghapusan Pelacak Status Chrome Masalah CRBug

Jika ini berdampak terhadap siapa pun, saya akan memakan topi saya. getStorageUpdates() hampir tidak pernah (jika sama sekali) digunakan di web.

Mengutip spesifikasi HTML5 (versi yang sangat lama):

Keren, kan? Spesifikasi ini bahkan menggunakan kata "whence" (yang jika kemunculan merupakan satu-satunya instance dalam spesifikasi). Pada tingkat spesifikasi ada StorageMutex yang mengontrol akses untuk memblokir penyimpanan seperti localStorage dan cookie, dan API ini akan membantu membebaskan mutex tersebut sehingga skrip lain tidak akan diblokir oleh StorageMutex ini. Namun tidak pernah diimplementasikan, tidak didukung di IE atau Gecko, dan implementasi WebKit (dan juga Blink) tidak beroperasi.

Fitur ini telah cukup lama dihapus dari spesifikasi dan telah dihapus sepenuhnya dari Blink (untuk waktu yang lama tanpa pengoperasian dan tidak melakukan apa pun meskipun dipanggil).

Jika memiliki kode yang memanggil navigator.getStorageUpdates(), kemungkinan Anda harus memeriksa keberadaan fungsi tersebut sebelum memanggilnya.

Object.observe() tidak digunakan lagi

TL;DR: Object.observe() tidak digunakan lagi karena tidak lagi berada di jalur standardisasi dan akan dihapus dalam rilis mendatang.

Rencana Penghapusan Pelacak Status Chrome Masalah CRBug

Pada November 2015, diumumkan bahwa Object.Observe dibatalkan dari TC39. API ini tidak digunakan lagi dari Chrome 49 dan Anda akan melihat peringatan berikut di konsol jika mencoba menggunakannya:

&#39;Object.observe&#39; tidak digunakan lagi dan akan dihapus di M50, sekitar April 
    2016.
'Object.observe' tidak digunakan lagi dan akan dihapus di M50, sekitar April 2016. Lihat https://www.chromestatus.com/features/6147094632988672 untuk mengetahui detail selengkapnya.

Banyak developer yang menyukai API ini dan jika Anda bereksperimen dengan API ini dan sekarang sedang mencari jalur transisi, pertimbangkan untuk menggunakan polyfill seperti MaxArt2501/object-observe atau library wrapper seperti polymer/observe-js.