API-beëindigingen en verwijderingen in Chrome 50

In bijna elke versie van Chrome zien we een aanzienlijk aantal updates en verbeteringen aan het product, de prestaties ervan en ook de mogelijkheden van het webplatform.

In Chrome 50 (geschatte bètadatum: 10 tot 17 maart) zijn er een aantal wijzigingen in Chrome. Deze lijst kan op elk moment worden gewijzigd.

AppCache is verouderd in onveilige contexten

TL;DR : Om cross-site scripting te belemmeren, beëindigen we AppCache op onveilige oorsprongen. We verwachten dat het in Chrome 52 alleen zal werken op origines die inhoud via HTTPS aanbieden.

Intentie om te verwijderen | Chromestatustracker | Chroombug

AppCache is een functie die offline en permanente toegang tot een oorsprong mogelijk maakt, wat een krachtige escalatie van bevoegdheden is voor een cross-site scripting-aanval. Als onderdeel van een grotere inspanning om krachtige functies op onveilige oorsprongen te verwijderen .

Chrome verwijdert deze aanvalsvector door deze alleen via HTTPS toe te staan. We beëindigen HTTP-ondersteuning in Chrome 50 en verwachten deze volledig te verwijderen in Chrome 52.

Document.defaultCharset is verwijderd

TL;DR : document.defaultCharset is verwijderd om de naleving van de specificaties te verbeteren.

Intentie om te verwijderen | Chromestatustracker | CRBug-probleem

De document.defaultCharset , verouderd in Chrome 49, is een alleen-lezen eigenschap die de standaard tekencodering van het systeem van de gebruiker retourneert op basis van hun regionale instellingen. Het is niet nuttig gebleken om deze waarde te handhaven vanwege de manier waarop browsers de tekencoderingsinformatie gebruiken in de HTTP-reactie of in de metatag die in de pagina is ingebed.

Gebruik in plaats daarvan document.characterSet om de eerste waarde op te halen die is opgegeven in de HTTP-header. Als dat niet aanwezig is, krijgt u de waarde die is opgegeven in het charset attribuut van het <meta> -element (bijvoorbeeld <meta charset="utf-8"> ). Als geen van deze beschikbaar is, zal document.characterSet de systeeminstelling van de gebruiker zijn.

Je kunt meer discussies lezen over de redenering om dit niet te specificeren in dit github-probleem

TL;DR : Verwijder de ondersteuning voor de subresource voor het rel -attribuut van HTMLLinkElement .

Intentie om te verwijderen | Chromestatustracker | Chroombug

De bedoeling van het subresource attribuut op <link> was om een ​​bron vooraf op te halen tijdens de inactieve tijd van een browser. Nadat een browser een pagina heeft gedownload, kan deze bronnen zoals andere pagina's vooraf downloaden, zodat ze, wanneer ze door gebruikers worden opgevraagd, eenvoudigweg uit de browsercache kunnen worden opgehaald.

Het kenmerk subresource had te kampen met een aantal problemen. Ten eerste heeft het nooit gewerkt zoals bedoeld. Bronnen waarnaar wordt verwezen, zijn met lage prioriteit gedownload. Het kenmerk is nooit in een andere browser dan Chrome geïmplementeerd. De Chrome-implementatie bevatte een bug waardoor bronnen tweemaal werden gedownload.

Ontwikkelaars die de gebruikerservaring willen verbeteren door inhoud vooraf te laden, hebben een aantal opties, waarvan de meest aanpasbare is het bouwen van een servicemedewerker om te profiteren van precaching en de Caches API. Aanvullende oplossingen omvatten andere waarden voor het rel attribuut, waaronder preconnect , prefetch , preload , prerender . Sommige van deze opties zijn experimenteel en worden mogelijk niet breed ondersteund.

Verwijder de onveilige terugval van de TLS-versie

TL;DR : Verwijder een mechanisme om servers te dwingen gegevens terug te sturen met behulp van minder of niet-beveiligde versies van TLS.

Intentie om te verwijderen | Chromestatustracker | Chroombug

Transport Layer Security (TLS) ondersteunt een mechanisme voor het onderhandelen over versies, waardoor de introductie van nieuwe TLS-versies mogelijk is zonder de compatibiliteit te verbreken. Sommige servers hebben dit zo geïmplementeerd dat browsers als fallback onveilige eindpunten moesten gebruiken. Hierdoor kunnen aanvallers elke website, en niet alleen de website die verkeerd is geconfigureerd, dwingen te onderhandelen over zwakkere versies van TLS.

Getroffen sites kunnen geen verbinding maken met ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION . Beheerders moeten ervoor zorgen dat hun serversoftware up-to-date is. Als het probleem nog steeds niet is opgelost, neemt u contact op met de leverancier van de serversoftware om te zien of er een oplossing beschikbaar is.

Verwijder KeyboardEvent.prototype.keyLocation

TL;DR : Verwijder een onnodige alias voor het attribuut Keyboard.prototype.location .

Intentie om te verwijderen | Chromestatustracker | Chroombug

Dit attribuut is eenvoudigweg een alias voor het attribuut Keyboard.prototype.location , waarmee ondubbelzinnig kan worden gemaakt tussen toetsen die zich op meerdere plaatsen op een toetsenbord bevinden. Met beide kenmerken kunnen ontwikkelaars bijvoorbeeld onderscheid maken tussen de twee Enter -toetsen op een uitgebreid toetsenbord.

Fout- en succeshandlers vereist in RTCPeerConnection-methoden

TL;DR : De WebRTC RTCPeerConnection-methoden createOffer() en createAnswer() vereisen nu zowel een fouthandler als een succeshandler. Voorheen was het mogelijk deze methoden aan te roepen met alleen een succeshandler. Dat gebruik is verouderd.

Intentie om te verwijderen | Chromestatustracker | Chroombug

In Chrome 49 hebben we een waarschuwing toegevoegd als je setLocalDescription() of setRemoteDescription() aanroept zonder een fouthandler op te geven. Het fouthandlerargument is verplicht vanaf Chrome 50.

Dit maakt deel uit van het vrijmaken van de weg voor het introduceren van beloftes over deze methoden, zoals vereist door de WebRTC-specificatie .

Hier is een voorbeeld uit de WebRTC RTCPeerConnection-demo ( main.js, regel 126 ):

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

Houd er rekening mee dat zowel setLocalDescription() als setRemoteDescription() een fouthandler hebben. Oudere browsers die alleen een succeshandler verwachten, zullen het fouthandlerargument eenvoudigweg negeren als het aanwezig is; Het aanroepen van deze code in een oudere browser zal geen uitzondering veroorzaken.

Over het algemeen raden we u aan voor productie-WebRTC-applicaties adapter.js te gebruiken, een vulstuk, onderhouden door het WebRTC-project, om apps te beschermen tegen specificatiewijzigingen en verschillen in voorvoegsels.

De XMLHttpRequestProgressEvent wordt niet langer ondersteund

TL;DR : De XMLHttpRequestProgressEvent -interface wordt verwijderd, samen met de attributen position en totalSize .

Intentie om te verwijderen | Chromestatustracker | Chroombug

Deze gebeurtenis bestond ter ondersteuning van de position van de Gecko-compatibiliteitseigenschappen en totalSize . Ondersteuning voor alle drie is in Mozilla 22 geschrapt en de functionaliteit is al lang achterhaald door 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
        }
      }

Verwijder de vooraf ingestelde gecodeerde media-extensies

TL;DR : vooraf ingestelde gecodeerde media-extensies zijn verwijderd ten gunste van een op specificaties gebaseerde vervanging zonder voorvoegsel.

Intentie om te verwijderen | Chromestatustracker | Chroombug

In Chrome 42 hebben we een op specificaties gebaseerde , niet-voorgefixeerde versie van gecodeerde media-extensies geleverd. Deze API wordt gebruikt voor het ontdekken, selecteren en communiceren met Digital Rights Management-systemen voor gebruik met HTMLMediaElement .

Dat was bijna een jaar geleden. En aangezien de versie zonder voorvoegsel meer mogelijkheden heeft dan de versie met voorvoegsel, is het tijd om de versie met voorvoegsel van de API te verwijderen.

Ondersteuning voor SVGElement.offset-eigenschappen verwijderen

TL;DR : Offset-eigenschappen voor SVGElement zijn geschrapt ten gunste van de breder ondersteunde eigenschappen op HTMLElement .

Intentie om te verwijderen | Chromestatustracker | Chroombug

Offset-eigenschappen worden al lang ondersteund door zowel HTMLElement als SVGElement ; Gecko en Edge ondersteunen ze echter alleen op HTMLElement . Om de consistentie tussen browsers te verbeteren, zijn deze eigenschappen in Chrome 48 verouderd en worden ze nu verwijderd.

Hoewel gelijkwaardige eigenschappen deel uitmaken van HTMLElement , kunnen ontwikkelaars die op zoek zijn naar een alternatief ook getBoundingClientRect() gebruiken