Chrome 54'te API'lerin Kullanımdan Kaldırılması ve Kaldırılması

Chrome'un neredeyse her sürümünde üründe, performansında ve Web Platformu'nun özelliklerinde önemli sayıda güncelleme ve iyileştirme yapıldığını görüyoruz. Bu makalede, 15 Eylül itibarıyla beta sürümünde olan Chrome 54'teki desteği sonlandırılan ve kaldırılan özellikler açıklanmaktadır. Bu liste herhangi bir zamanda değişebilir.

Kaldırma işleyicisinde gezinmeleri devre dışı bırakma

Özet: Chrome'u HTML spesifikasyonunun yanı sıra Firefox ve Safari ile uyumlu hale getirmek için tüm kaynaklar arası gezinmelere window.onunload etkinlik işleyicilerinde izin verilmeyecek.

Kaldırma Amacı | Chromestatus Tracker | Chromium Bug

Chrome'un önceki sürümlerinde, window.onunload içinde çapraz kaynaklı gezinmenin kesintiye uğramasına izin veriliyordu. window.location.href = '#fragment' ayarını yaparak HTML spesifikasyonuna göre, unload işleyicilerinde yalnızca sayfa içi gezinmelere izin verilir ve Chrome'un önceki sürümlerinde, spesifikasyonun gerektirdiği şekilde diğer gezinme yöntemleri engelleniyordu. Chrome 54'ten itibaren, spesifikasyonun yanı sıra Firefox ve Safari ile uyumlu olmak için bu tür gezinmelere izin verilmeyecek.

HTTP/0.9 desteği sonlandırıldı

Özet: HTTP/0.9 kullanımdan kaldırıldı. Geliştiriciler daha yeni bir sürüme, tercihen HTTP/2'ye geçmelidir.

Kaldırma Amacı | Chromestatus Tracker | Chromium Bug

HTTP/0.9, HTTP/1.x'in öncüsüdür. Bu sürümde, sonraki sürümlerde bulunan birçok özellik yoktur. Modern web'in yanıt başlıklarının olmaması, özellikle endişe verici bir durumdur. Bu başlıklar olmadan, HTTP/0.9 yanıtının gerçekten HTTP/0.9 yanıtı olduğunu doğrulamanın bir yolu yoktur. Bu durum, çeşitli sorunlara yol açabilir. Örnek olarak şunlar verilebilir:

  • Belirli hata yanıtlarını geçerli HTTP/0.9 yanıtları olarak değerlendiren istemciler.
  • İstemcilerin yanıtları sonsuza kadar veya kullanıcı isteği yapan sayfadan ayrılana kadar canlı kalan bir GET isteği olarak değerlendirmesine neden olan, istek soketini kapatamayan sunucular.
  • Tarayıcıya isteğin başarısız olduğunu bildiremeyen sunucular, bu durum önbelleğe alma sezgileriyle ilgili sorunlara neden olabilir.

HTTP/0.9 ile ilgili sorunları düzeltmenin tek kesin yolu desteği tamamen kaldırmaktır. Bu nedenle Chrome 54'te HTTP/0.9 desteği kaldırılmıştır.

initTouchEvent kullanımı kaldırıldı

Özet: initTouchEvent yerine TouchEvent constructor kullanılması tercih edilerek kullanımdan kaldırıldı. Bu değişiklik, spesifikasyonlara uygunluğu artırmak için yapıldı ve Chrome 54'te tamamen kaldırılacak.

Kaldırma Amacı | Chromestatus Tracker | Chromium Bug

Geliştiriciler uzun süredir initTouchEvent API'sini kullanarak Chrome'da yapay dokunma etkinlikleri oluşturabiliyor. Bunlar, sitenizdeki bazı kullanıcı arayüzlerini test etmek veya otomatikleştirmek için dokunma etkinliklerini simüle etmek amacıyla sıklıkla kullanılır. Chrome 49'dan beri, kullanımdan kaldırılan bu API aşağıdaki uyarıyı gösteriyor .

Dokunma Etkinliği Uyarısı
TouchEvent.initTouchEvent artık kullanılmamaktadır ve Eylül 2016 civarında M53'te 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 adresine bakın.

Bu değişiklik, Touch Events spesifikasyonunda yer almamasının yanı sıra birçok nedenden dolayı faydalıdır. Chrome'daki initTouchEvent uygulaması, Safari'nin initTouchEvent API'siyle hiç uyumlu değildi ve Android'deki Firefox'tan farklıydı. Son olarak, TouchEvent oluşturucunun kullanımı çok daha kolaydır.

Bu nedenlerle, ne spesifikasyona uygun olan ne de diğer tek uygulamayla uyumlu olan bir API'yi sürdürmek yerine spesifikasyonu takip etmeye karar verdik. Alternatif bir yönteme ihtiyaç duyan geliştiriciler TouchEvent oluşturucusunu kullanmalıdır.

initTouchEvent API'sinin iOS ve Android/Chrome uygulamaları çok farklı olduğundan siteler genellikle şu türde kodlar içeriyordu: (Firefox genellikle unutuluyordu)

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

Bu durum, kullanıcı aracısında "Android" arandığı ve Android'deki Chrome'un bu kullanımdan kaldırma işlemine uyup bu işlemi tetikleyeceği için kötüdür. Ancak, Android'de bir süre daha WebKit ve eski Blink tabanlı tarayıcılar olacağından ve eski API'yi desteklemeniz gerekeceğinden henüz kaldırılamaz.

Web'de TouchEvent öğelerini doğru şekilde işlemek için kodunuzu değiştirerek window nesnesinde TouchEvent öğesinin varlığını kontrol edip Firefox, IE Edge ve Chrome'u desteklemelisiniz. Ayrıca, TouchEvent öğesinin pozitif bir "uzunluğa" sahip olması durumunda (bir bağımsız değişken alan bir oluşturucu olduğunu gösterir) bu öğeyi kullanmalısınız.

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

KeyboardEvent.keyIdentifier özelliği kaldırıldı

Özet: Standartlara dayalı KeyboardEvent.key özelliği lehine, çok az desteklenen keyboardEvent.keyIdentifier özelliği kaldırılıyor.

Kaldırma Amacı | Chromestatus Tracker | Chromium Bug

keyboardEvent.keyIdentifier özelliği, 2009 ve 2010 yıllarında kısa bir süre W3C spesifikasyonunun bir parçasıydı. Ancak bu özellik yalnızca WebKit'te uygulandı.

Bu özelliği değiştirmesi gereken geliştiriciler, standartlara dayalı KeyboardEvent.key özelliğini veya KeyboardEvent.code özelliğini (geçtiğimiz ilkbaharda yayınladığımız bir makalede açıklandığı gibi) kullanabilir. İlki, Safari hariç tüm büyük masaüstü tarayıcılarda desteklendiği için en geniş uygulama tabanına sahiptir. İkincisi şu anda Chrome, Firefox ve Opera'da desteklenmektedir. Bu özelliğin kaldırılması, KeyboardEvent.key mülkünün kullanımını artırmayı amaçlamaktadır. Apple, bu özelliği destekleyip desteklemeyeceği konusunda henüz bir açıklama yapmadı. Ancak, desteği sonlandırılan (ancak Chrome'dan henüz kaldırılmayan) KeyboardEvent.keyCode ve KeyboardEvent.charCode özellikleri Safari'de hâlâ kullanılabilir.

MediaStream ended etkinliğini, özelliğini ve onended özelliğini kaldırma

Özet: ended etkinliği ve özelliği ile onended etkinlik işleyicisi, Media Capture and Streams spesifikasyonundan kaldırıldıkları için kaldırılıyor.

Kaldırma Amacı | Chromestatus Tracker | Chromium Bug

ended etkinliği ve onended etkinlik işleyicisi yaklaşık üç yıldır WebRTC spesifikasyonunun bir parçası değildir. Etkinlikleri izlemek isteyen geliştiriciler, MediaStreams yerine MediaStreamTracks kullanmalıdır.

SVGSVGElement.viewPort özelliğinin desteğini sonlandırma

Bu uygulama 2012'den beri Chrome'da çalışmamaktadır. Bu özellik diğer tarayıcılarda hiç bulunmuyor ve spesifikasyondan kaldırıldı. Bu nedenlerden dolayı özelliğin desteği sonlandırılıyor. Chrome 55'te kaldırılması beklenmektedir.

Kaldırma Amacı | Chromestatus Tracker | Chromium Bug

SVGViewElement.viewTarget özelliğini kullanımdan kaldırma

SVGViewElement.viewTarget özelliği, SVG2.0 spesifikasyonunun bir parçası değildir ve kullanımı azdır veya hiç yoktur. Bu özellik Chrome 54'te kullanımdan kaldırılmıştır. Chrome 56'da kaldırılması bekleniyor.

Kaldırma Amacı | Chromestatus Tracker | Chromium Bug

Remove SVGZoomEvent

SVGZoomEvent, SVG2.0 spesifikasyonunun bir parçası değildir ve Chromium'da çalışmaz. Ancak bu özellik hâlâ algılanabildiğinden geliştiricilerde kafa karışıklığına yol açabilir. Kaldırılır.

Kaldırma Amacı | Chromestatus Tracker | Chromium Bug