Rimozioni e ritiri delle API in Chrome 54

Joe Medley
Mario Bianchi

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 .

Avviso evento tocco
TouchEvent.initTouchEvent è deprecato e verrà rimosso nella versione M53 verso settembre 2016. Usa invece il costruttore TouchEvent. Per maggiori dettagli, visita la pagina https://www.chromestatus.com/features/5730982598541312.

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