Rimozioni e ritiri di API in Chrome 50

In quasi tutte le versioni di Chrome vengono apportati un numero significativo di aggiornamenti e miglioramenti al prodotto, alle sue prestazioni e alle funzionalità della piattaforma web.

In Chrome 50 (data stimata della versione beta: 10-17 marzo) sono state apportate diverse modifiche. Questo elenco è soggetto a modifiche in qualsiasi momento.

AppCache deprecata in contesti non sicuri

TL;DR: per ostacolare lo scripting cross-site, stiamo ritirando AppCache per le origini non sicure. Prevediamo che in Chrome 52 funzionerà solo sulle origini che pubblicano contenuti tramite HTTPS.

Intento di rimozione | Tracker di Chromestatus | Bug di Chromium

AppCache è una funzionalità che consente l'accesso offline e persistente a un'origine, che è un'efficace escalation dei privilegi per un attacco cross-site scripting. Come parte di un impegno più ampio per rimuovere funzionalità efficaci da origini non sicure.

Chrome sta rimuovendo questo vettore di attacco consentendo il protocollo solo su HTTPS. Abbiamo ritirato il supporto HTTP in Chrome 50 e prevediamo di rimuoverlo del tutto in Chrome 52.

Document.defaultCharset rimosso

TL;DR: document.defaultCharset è stato rimosso per migliorare la conformità alle specifiche.

Intento di rimozione | Tracker dello stato di Chrome | Problema CRBug

document.defaultCharset, deprecato in Chrome 49, è una proprietà di sola lettura che restituisce la codifica dei caratteri predefinita del sistema dell'utente in base alle sue impostazioni regionali. Non è stato ritenuto utile mantenere questo valore a causa del modo in cui i browser utilizzano le informazioni sulla codifica dei caratteri nella risposta HTTP o nel meta tag incorporato nella pagina.

Utilizza invece document.characterSet per ottenere il primo valore specificato nell'intestazione HTTP. Se non è presente, otterrai il valore specificato nell'attributo charset dell'elemento <meta> (ad esempio, <meta charset="utf-8">). Infine, se nessuno di questi è disponibile, document.characterSet sarà l'impostazione di sistema dell'utente.

Puoi trovare ulteriori informazioni sul ragionamento alla base della scelta di non specificare questo aspetto in questo problema di GitHub

TL;DR: rimuovi il supporto del valore subresource per l'attributo rel di HTMLLinkElement.

Intento di rimozione | Tracker dello stato di Chrome | Bug di Chromium

Lo scopo dell'attributo subresource su <link> era di precaricare una risorsa durante il tempo di inattività di un browser. Dopo aver scaricato una pagina, un browser potrebbe pre-scaricare risorse come altre pagine in modo da poterle recuperare semplicemente dalla cache del browser quando le richiedevano dagli utenti.

L'attributo subresource ha riscontrato diversi problemi. Innanzitutto, non ha mai funzionato come previsto. Le risorse di riferimento sono state scaricate con priorità bassa. L'attributo non è mai stato implementato su nessun browser diverso da Chrome. L'implementazione di Chrome aveva un bug che causava il download delle risorse due volte.

Gli sviluppatori che vogliono migliorare l'esperienza utente tramite il precaricamento dei contenuti hanno a disposizione diverse opzioni, la più personalizzabile delle quali è creare un servizio worker per sfruttare la memorizzazione nella cache e l'API Caches. Altre soluzioni includono altri valori per l'attributo rel, tra cui preconnect, prefetch, preload, prerender. Alcune di queste opzioni sono sperimentali e potrebbero non essere supportate a livello generale.

Rimuovere il fallback alla versione TLS non sicura

TL;DR: rimuovi un meccanismo per forzare i server a restituire i dati utilizzando versioni meno o non sicure di TLS.

Intento di rimozione | Tracker di Chromestatus | Bug di Chromium

TLS (Transport Layer Security) supporta un meccanismo per la negoziazione delle versioni, consentendo l'introduzione di nuove versioni TLS senza interrompere la compatibilità. Alcuni server l'hanno implementata in modo tale che i browser dovevano usare endpoint non sicuri come fallback. Per questo motivo, gli utenti malintenzionati potrebbero costringere qualsiasi sito web, non solo quelli configurati in modo errato, a negoziare versioni meno sicure di TLS.

I siti interessati non riusciranno a connettersi a ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION. Gli amministratori devono assicurarsi che il software del server sia aggiornato. Se il problema persiste, contatta il fornitore del software server per vedere se è disponibile una soluzione.

Rimuovi KeyboardEvent.prototype.keyLocation

TL;DR: rimuovi un alias non necessario per l'attributo Keyboard.prototype.location.

Intento di rimozione | Tracker di Chromestatus | Bug di Chromium

Questo attributo è semplicemente un alias dell'attributo Keyboard.prototype.location, che consente di distinguere i tasti che si trovano in più punti su una tastiera. Ad esempio, entrambi gli attributi consentono agli sviluppatori di distinguere tra i due tasti Enter su una tastiera estesa.

Gestori di errori e di successo richiesti nei metodi RTCPeerConnection

TL;DR: i metodi createOffer() e createAnswer() di WebRTC RTCPeerConnection ora richiedono un gestore degli errori e un gestore del successo. In precedenza, era possibile chiamare questi metodi solo con un gestore di successo. Questo utilizzo è deprecato.

Intento di rimozione | Tracker di Chromestatus | Bug di Chromium

In Chrome 49 abbiamo aggiunto un avviso se chiami setLocalDescription() o setRemoteDescription() senza fornire un gestore degli errori. L'argomento gestore degli errori è obbligatorio a partire da Chrome 50.

Questo fa parte del percorso per l'introduzione delle promesse in questi metodi, come richiesto dalla specifica WebRTC.

Ecco un esempio della demo RTCPeerConnection WebRTC (main.js, riga 126):

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

Tieni presente che sia setLocalDescription() che setRemoteDescription() hanno un gestore degli errori. I browser meno recenti che si aspettano solo un gestore di successo ignoreranno semplicemente l'argomento del gestore degli errori se è presente. La chiamata di questo codice in un browser meno recente non causerà un'eccezione.

In generale, per le applicazioni WebRTC di produzione consigliamo di utilizzare adapter.js, uno shim, gestito dal progetto WebRTC, per isolare le app dalle modifiche alle specifiche e dalle differenze di prefisso.

XMLHttpRequestProgressEvent non è più supportato

TL;DR: l'interfaccia XMLHttpRequestProgressEvent verrà rimossa, insieme agli attributi position e totalSize.

Intento di rimozione | Tracker dello stato di Chrome | Bug di Chromium

Questo evento esisteva per supportare le proprietà di compatibilità Gecko position e totalSize. Il supporto di tutti e tre è stato interrotto in Mozilla 22 e la funzionalità è stata sostituita da ProgressEvent.

     var progressBar = document.getElementById("p"),
          client = new XMLHttpRequest()
      client.open("GET", "magical-unicorns")
      client.onprogress = function(pe) {
        if(pe.lengthComputable) {
          progressBar.max = pe.total
          progressBar.value = pe.loaded
        }
      }

Rimuovi le estensioni dei contenuti multimediali criptati con prefisso

TL;DR: le estensioni multimediali con prefisso criptato sono state rimosse a favore di un remplacement senza prefisso basato su specifiche.

Intento di rimozione | Tracker di Chromestatus | Bug di Chromium

In Chrome 42, abbiamo distribuito una versione senza prefisso basata su specifiche delle estensioni multimediali criptate. Questa API viene utilizzata per scoprire, selezionare e interagire con i sistemi di gestione dei diritti digitali da utilizzare con HTMLMediaElement.

È successo quasi un anno fa. E poiché la versione senza prefisso ha più funzionalità rispetto alla versione con prefisso, è il momento di rimuovere la versione dell'API con prefisso.

Rimozione del supporto per le proprietà SVGElement.offset

TL;DR: le proprietà di offset per SVGElement sono state ritirate a favore delle proprietà più supportate su HTMLElement.

Intento di rimozione | Tracker di Chromestatus | Bug di Chromium

Le proprietà di offset sono supportate da tempo sia da HTMLElement sia da SVGElement; tuttavia, Gecko ed Edge le supportano solo su HTMLElement. Per migliorare la coerenza tra i browser, queste proprietà sono state ritirate in Chrome 48 e ora vengono rimosse.

Sebbene le proprietà equivalenti siano parte di HTMLElement, gli sviluppatori che cercano un'alternativa possono anche utilizzare getBoundingClientRect().