In quasi tutte le versioni di Chrome notiamo un numero significativo di aggiornamenti e miglioramenti al prodotto, alle sue prestazioni e anche alle funzionalità della piattaforma web. Questo articolo descrive i ritiri e le rimozioni in Chrome 54, in versione beta a partire dal 15 settembre. Questo elenco è soggetto a modifiche in qualsiasi momento.
Disattiva navigazioni nel gestore dell'unload
TL;DR: tutte le navigazioni multiorigine non saranno consentite nei gestori di eventi window.onunload
per allineare Chrome con le specifiche HTML, così come Firefox e Safari.
Intent di rimozione | Tracker di stato di Chrome | Bug di Chromium
Le versioni precedenti di Chrome consentivano l'interruzione della navigazione multiorigine all'interno di window.onunload
. impostando window.location.href = '#fragment'
. Secondo le specifiche HTML, nei gestori dell'unload sono consentite soltanto le navigazioni all'interno della pagina. Nelle versioni precedenti di Chrome, altri metodi di navigazione erano bloccati come richiesto dalle specifiche. A partire da Chrome 54, queste navigazioni non saranno più consentite per allinearci alle specifiche, nonché a Firefox e Safari.
HTTP/0.9 obsoleto
TL;DR: HTTP/0.9 è deprecato. Gli sviluppatori dovrebbero passare a una versione successiva, preferibilmente HTTP/2.
Intent di rimozione | Tracker di stato di Chrome | Bug di Chromium
HTTP/0.9 è il predecessore di HTTP/1.x. È privo di molte caratteristiche dei suoi successori. Una preoccupazione particolare del web moderno è la sua mancanza di intestazioni di risposta. Senza di loro, non c'è modo di verificare che una risposta HTTP/0.9 sia davvero una risposta HTTP/0.9. Questa operazione può causare diversi problemi. Alcuni esempi includono, tra gli altri problemi:
- Client che trattano determinate risposte di errore come risposte HTTP/0.9 valide.
- Server che non riescono a chiudere il socket delle richieste causando ai client di trattare le risposte come GET inutilizzati che rimangono attivi per l'eternità o finché un utente non naviga da una pagina che ha effettuato la richiesta.
- Server che non sono in grado di indicare al browser che una richiesta non è andata a buon fine, il che può causare problemi con l'euristica di memorizzazione nella cache.
L'unico modo infallibile per risolvere i problemi relativi a HTTP/0.9 è rimuovere completamente l'assistenza. Per questo motivo, nella versione 54 di Chrome non è più supportato HTTP/0.9.
L'utilizzo di initTouchEvent
è stato rimosso
TL;DR:
initTouchEvent
è stato deprecato a favore di
TouchEvent
constructor
per migliorare la conformità alle specifiche e sarà rimosso del tutto in Chrome 54.
Intent di rimozione | Tracker di stato di Chrome | Bug di Chromium
Per molto tempo gli sviluppatori sono riusciti a creare eventi touch sintetici in Chrome
utilizzando l'API initTouchEvent
. Vengono spesso utilizzati per simulare eventi touch,
per testare o automatizzare alcune UI nel tuo sito. A partire da Chrome 49, questa API deprecata ha mostrato il seguente avviso .
Oltre a non far parte della specifica degli eventi touch, ci sono diversi motivi per cui questa modifica è positiva.
L'implementazione di initTouchEvent
per Chrome non era affatto compatibile con l'API initTouchEvent
di Safari ed era diversa da quella di Firefox su Android. Infine, il costruttore TouchEvent
è molto più facile da usare.
Per questi motivi, abbiamo deciso di seguire le specifiche piuttosto che mantenere un'API che non è specifica né compatibile con l'unica altra implementazione.
Gli sviluppatori che hanno bisogno di un'alternativa devono utilizzare il costruttore TouchEvent
.
Poiché le implementazioni per iOS e Android/Chrome dell'API initTouchEvent
erano molto diverse, i siti spesso avevano
codice simile a
(spesso dimenticando 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);
Questo problema è negativo perché cerca "Android" nello user agent e Chrome su Android corrisponderà e verrà ritirato. Non può essere ancora rimosso, ma perché su Android ci saranno altri WebKit e browser meno recenti basati su Blink che dovranno ancora supportare l'API precedente.
Per gestire correttamente TouchEvent
sul Web, devi cambiare il tuo codice per supportare Firefox, IE Edge e Chrome verificando l'esistenza di TouchEvent
nell'oggetto window
e se ha una "lunghezza" positiva (indicando che si tratta di un costruttore che accetta un argomento), dovresti usarla.
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);
Attributo KeyboardEvent.keyIdentifier rimosso
TL;DR: la proprietà keyboardEvent.keyIdentifier
poco supportata viene rimossa a favore della proprietà KeyboardEvent.key
basata su standard.
Intent di rimozione | Tracker di stato di Chrome | Bug di Chromium
L'attributo keyboardEvent.keyIdentifier
è stato brevemente parte di una specifica W3C nel 2009 e nel 2010. Tuttavia, è stato implementato solo in WebKit.
Gli sviluppatori che devono sostituire questo attributo possono utilizzare la proprietà KeyboardEvent.key
basata su standard o la proprietà KeyboardEvent.code
(come descritto in un articolo che abbiamo fatto la scorsa primavera). Il primo ha la base di implementazione più ampia ed è supportato su tutti i principali browser desktop, ad eccezione di Safari. La versione successiva è attualmente supportata su Chrome, Firefox e Opera. La rimozione di questa funzionalità ha lo scopo di promuovere l'adozione della proprietà KeyboardEvent.key
. Apple non comunica che questa funzionalità sarà supportata; tuttavia, le proprietà KeyboardEvent.keyCode
e KeyboardEvent.charCode
deprecate (ma non ancora rimosse da Chrome) sono ancora disponibili su Safari.
Rimuovi l'evento e l'attributo MediaStream terminati e l'attributo onended
TL;DR: l'evento e l'attributo ended
e il gestore di eventi onended
sono stati rimossi perché sono stati rimossi dalle specifiche di Media Capture and Streams.
Intent di rimozione | Tracker di stato di Chrome | Bug di Chromium
Né l'evento ended
né il gestore di eventi onended
fanno parte delle specifiche WebRTC da circa tre anni. Gli sviluppatori che vogliono guardare gli eventi dovrebbero usare MediaStreamTracks
anziché MediaStreams
.
Ritira SVGSVGElement.viewPort
L'implementazione non funziona in Chrome dal 2012. L'attributo non è presente negli altri browser ed è stato rimosso dalla specifica. Per questi motivi, la proprietà è stata ritirata. La rimozione è prevista in Chrome 55.
Intent di rimozione | Tracker di stato di Chrome | Bug di Chromium
Depreca SVGViewElement.viewTarget
L'attributo SVGViewElement.viewTarget
non fa parte della specifica SVG2.0 e il suo utilizzo è limitato o inesistente. Questo attributo è obsoleto in Chrome 54. La rimozione è prevista in Chrome 56.
Intent di rimozione | Tracker di stato di Chrome | Bug di Chromium
Rimuovi SVGZoomEvent
SVGZoomEvent
non fa parte della specifica SVG2.0 e non funziona in Chromium. Nonostante sia ancora rilevabile nelle funzionalità, gli sviluppatori potrebbero creare confusione. Verrà rimosso.
Intent di rimozione | Tracker di stato di Chrome | Bug di Chromium