Chrome 49'da API'lerin Kullanımdan Kaldırılması ve Kaldırılması

Chrome'un hemen hemen her sürümünde üründe, performansında ve web platformunun özelliklerinde çok sayıda güncelleme ve iyileştirme görüyoruz.

Chrome 49'da (Beta 2 Şubat 2016. Tahmini kararlı tarih: Mart 2016) Chrome'da bazı değişiklikler yapıldı.

getComputedStyle(e).cssX içinde "css" ön ekinin kullanımı kullanımdan kaldırıldı

TL;DR: getComputedStyle(e)'te "css" ön eki, resmi spec bir parçası olmadığı için kullanımdan kaldırılmıştır.

getComputedStyle çok kullanışlı bir işlev. Bu işlev, DOM öğesinin stillerinin oluşturma motoru tarafından hesaplandığı şekilde tüm CSS değerlerini döndürür. Örneğin, getComputedStyle(_someElement_).height parametresini çalıştırabilirsiniz.Bu değer, öğenin şu anda gösterildiği şekliyle yüksekliği olduğundan 224,1 piksel döndürebilir.

Oldukça kullanışlı bir API'ye benziyor. Peki neleri değiştiriyoruz?

Chrome'un oluşturma motoru Blink olarak değişmeden önce, bu araç WebKit tarafından destekleniyordu ve bu özellik, bir mülkün başına "css" ön ekini eklemenize olanak tanıyordu. Örneğin, getComputedStyle(e).height yerine getComputedStyle(e).cssHeight. Her ikisi de aynı temel değerlerle eşlendikleri aynı verileri döndürür, ancak "css" ön ekinin bu şekilde kullanımı standart dışıdır ve bu nedenle kullanımdan kaldırılmış ve kaldırılmıştır.

Not: cssFloat standart bir mülktür ve bu kullanımdan kaldırma işleminden etkilenmez.

Chrome 49'da bir mülke bu şekilde erişirseniz özellik undefined değerini döndürür ve kodunuzu düzeltmeniz gerekir.

initTouchEvent'in kullanımı sonlandırıldı

TL;DR: initTouchEvent, spesifikasyon uyumluluğunu iyileştirmek amacıyla kullanımdan kaldırılan TouchEvent constructor sürümü yerine Chrome 54'te tamamen kaldırılacaktır.

Intent to Remove Chromestatus Tracker CRBug Sorunu

Uzun bir süredir, Chrome'da initTouchEvent API'sini kullanarak sentetik dokunma etkinlikleri oluşturabiliyorsunuz. Bu etkinlikler, sitenizdeki bazı kullanıcı arayüzlerini test etmek veya otomatikleştirmek amacıyla Dokunma Etkinlikleri'nin simülasyonunda sık sık kullanılır. Chrome 49'da bu API'yi kullanımdan kaldırdık ve Chrome 53'te tamamen kaldırmak amacıyla aşağıdaki uyarıyı göstereceğiz.

"TouchEvent.initTouchEvent" kullanımdan kaldırılmıştır ve Eylül 2016 civarındaki M53 sürümünde kaldırılacaktır. Lütfen bunun yerine TouchEvent oluşturucusunu kullanın.
"TouchEvent.initTouchEvent" kullanımdan kaldırılmıştır ve Eylül 2016 civarındaki M53 sürümünde kaldırılacaktır. Lütfen bunun yerine TouchEvent oluşturucusunu kullanın. Daha ayrıntılı bilgi için https://www.chromestatus.com/features/5730982598541312 adresini ziyaret edin.

Bu değişikliğin iyi olmasının birkaç nedeni vardır. Ayrıca, Dokunma Etkinlikleri spesifikasyonunda da yer almamaktadır. Chrome'un initTouchEvent uygulaması Safari'nin initTouchEvent API'siyle hiç uyumlu değildi ve Android'deki Firefox'unkinden farklıydı. Son olarak, TouchEvent oluşturucunun kullanımı çok daha kolaydır.

Diğer tek uygulamayla uyumlu olmayan veya belirtilmemiş bir API'yi kullanmaya devam etmek yerine spesifikasyona uymaya karar verdik. Bunun sonucunda önce initTouchEvent işlevini kullanımdan kaldırıyoruz ve sonra da geliştiricilerin TouchEvent oluşturucusunu kullanmasını zorunlu kılıyoruz.

Bu API'nin web'de kullanımı var, ancak az sayıda site tarafından kullanıldığını biliyoruz. Bu nedenle API'yi normalde istediğimiz kadar hızlı kaldırmıyoruz. Kullanımın bir bölümünün, Chrome'un imza sürümünü işlemeyen sitelerden dolayı bozulduğunu düşünüyoruz.

initTouchEvent API'sinin iOS ve Android/Chrome uygulamaları son derece farklı olduğundan genellikle kodlarla birlikte çalışırsınız (Firefox'u genellikle unutursunuz).

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

Öncelikle bu kötü bir durumdur çünkü Kullanıcı Aracısı'nda "Android"i arar ve Android'deki Chrome da eşleşecek ve bu desteği sonlandırmayı bulacaktır. Android'de bir süre başka WebKit ve eski Blink tabanlı tarayıcılar olacağı için eski API'yi desteklemeniz gerekecek. Bu nedenle henüz kaldırılamaz.

TouchEvents öğesini web'de doğru bir şekilde işlemek için kodunuzu Firefox, IE Edge ve Chrome'u destekleyecek şekilde değiştirmelisiniz. Bunun için window nesnesinde TouchEvent öğesinin olup olmadığını kontrol etmelisiniz. Ayrıca, pozitif bir "length" değerine sahipse (bağımsız değişken alan bir kurucu olduğunu belirtir) bunu kullanmanız gerekir.

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

RTCPeerConnection yöntemlerinde gereken hata ve başarı işleyiciler

TL;DR: WebRTC RTCPeerConnection yöntemleri createOffer() ve createAnswer() artık bir hata işleyicinin yanı sıra başarı işleyici de gerektirir. Daha önce bu yöntemler yalnızca bir başarı işleyici ile çağrılabiliyordu. Bu kullanım desteği sonlandırılmıştır.

Chrome 49'da, hata işleyici sağlamadan setLocalDescription() veya setRemoteDescription() çağrılarını yaparsanız bir uyarı da ekledik. Chrome 50'de hata işleyici bağımsız değişkenini bu yöntemler için zorunlu hale getirmeyi umuyoruz.

Bu işlem, WebRTC spesifikasyonunun gerektirdiği şekilde, bu yöntemlerle ilgili vaatler verme sürecini açıklığa kavuşturmanın bir parçasıdır.

WebRTC RTCPeerConnection demosundan bir örnek (main.js, satır 126) aşağıda verilmiştir:

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

Hem setLocalDescription() hem de setRemoteDescription()'nin her zaman bir hata işleyici parametresine sahip olduğunu, dolayısıyla bu parametreyi belirtmenizin güvenli bir değişiklik olduğunu unutmayın.

Genel olarak, üretim WebRTC uygulamalarında uygulamaları spesifikasyon değişikliklerinden ve ön ek farklarından yalıtmak için WebRTC projesi tarafından yönetilen bir dolgu olan adapter.js'i kullanmanızı öneririz.

Document.defaultCharset desteği sonlandırıldı

TL;DR: Document.defaultCharset, spesifikasyon uyumluluğunu iyileştirmek için kullanımdan kaldırılmıştır.

Intent to Remove Chromestatus Tracker CRBug Sorunu

Document.defaultCharset, bölgesel ayarlarına göre kullanıcı sisteminin varsayılan karakter kodlamasını döndüren salt okunur bir özelliktir. Tarayıcıların, HTTP Yanıtındaki veya sayfaya yerleştirilmiş meta etiketteki karakter kodlama bilgilerini kullanma şekli nedeniyle bu değeri korumanın faydalı olmadığı tespit edilmiştir.

document.characterSet'i kullanarak HTTP başlığında belirtilen ilk değeri elde edersiniz. Bu mevcut değilse <meta> öğesinin charset özelliğinde belirtilen değeri alırsınız (örneğin, <meta charset="utf-8">). Son olarak, bunların hiçbiri mevcut değilse kullanıcının sistem ayarı document.characterSet olur.

Gecko bu özelliği desteklememiştir ve doğru bir şekilde belirtilmemiştir. Bu nedenle, bu özellik Chrome 49'da Blink'ten (Ocak 2016'da Beta sürümü) kullanımdan kaldırılacaktır. Mülk Chrome 50'de kaldırılana kadar konsolunuzda aşağıdaki uyarı görüntülenir:

&quot;Document.defaultCharset&quot; kullanımdan kaldırıldı ve Nisan 2016&#39;da M50 sürümünde kaldırılacaktır.
"Document.defaultCharset" kullanımdan kaldırıldı ve Nisan 2016 civarında M50 sürümünde mevcut olmayacak. Daha fazla ayrıntı için https://www.chromestatus.com/features/6217124578066432 adresine bakın.

Bunu belirtmeme nedenleriyle ilgili daha fazla tartışmayı gitHub'da okuyabilirsiniz https://github.com/whatwg/dom/issues/58

getStorageUpdates() kaldırıldı

Özet: Navigator.getStorageUpdates(), artık Gezgin spesifikasyonunda yer almadığından kaldırıldı.

Intent to Remove Chromestatus Tracker CRBug Sorunu

Bu durum herhangi birini etkilerse şapkamı yerim. getStorageUpdates() web'de neredeyse hiç kullanılmadı.

HTML5 spesifikasyonunun (çok eski sürümünden) alıntı yapmak için:

Kulağa hoş geliyor, değil mi? Spesifikasyonda "nereden" kelimesi bile kullanılır (bu, spesifikasyondaki tek durumun örneğidir). Spesifikasyon düzeyinde, localStorage ve çerezler gibi depolama alanlarını engellemeye erişimi kontrol eden bir StorageMutex vardı ve bu API, mutex'in (karşılıklı dışlama) serbest bırakılmasına yardımcı olarak diğer komut dosyalarının bu StorageMutex tarafından engellenmemesini sağlar. Ancak daha önce hiç uygulanmadı, IE veya Gecko'da desteklenmiyor. WebKit'in (ve dolayısıyla Blink'in) uygulaması işlemsiz oldu.

Bu özellik uzun süredir spesifikasyonlardan kaldırılmış ve Blink'ten de tamamen kaldırılmıştı (bu uzun süredir herhangi bir işlem yapmıyor ve çağrılsa bile hiçbir şey yapmıyordu).

Gerçekleşmesi küçük bir ihtimal olsa da navigator.getStorageUpdates() kodunu çağıran bir koda sahip olmanız durumunda, işlevi çağırmadan önce işlevin varlığını kontrol etmeniz gerekir.

Object.observe() desteği sonlandırıldı

Özet: Object.observe() artık standartlaştırma kanalında olmadığından kullanımdan kaldırılmıştır ve gelecekteki bir sürümde kaldırılacaktır.

Intent to Remove Chromestatus Tracker CRBug Sorunu

Kasım 2015'te Object.Observe'in TC39'dan çekildiği duyuruldu. Bu uygulama Chrome 49'dan kullanımdan kaldırılmıştır ve bu sürümü kullanmaya çalışırsanız konsolda aşağıdaki uyarıyı görürsünüz:

&quot;Object.observe&quot; kullanımdan kaldırılmıştır ve Nisan 2016 civarındaki M50 sürümünde kaldırılacaktır.
"Object.observe" kullanımdan kaldırılmıştır ve Nisan 2016 civarındaki M50 sürümünde kaldırılacaktır. Daha fazla ayrıntı için https://www.chromestatus.com/features/6147094632988672 adresini ziyaret edin.

Birçok geliştirici bu API'yi beğendi. API ile denemeler yapıyor ve şu anda bir geçiş yolu arıyorsanız MaxArt2501/object-observe gibi bir çoklu dolgu veya polymer/observe-js gibi bir sarmalayıcı kitaplığı kullanabilirsiniz.