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.
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:
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:
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.