API-Einstellungen und -Entfernungen in Chrome 50

Bei fast jeder Chrome-Version gibt es eine große Anzahl von Updates und Verbesserungen am Produkt, an seiner Leistung und auch an den Funktionen der Webplattform.

In Chrome 50 (voraussichtliches Betadatum: 10. bis 17. März) gibt es eine Reihe von Änderungen an Chrome. Diese Liste kann sich jederzeit ändern.

AppCache in nicht sicheren Kontexten eingestellt

Zusammenfassung: Um Cross-Site-Scripting zu erschweren, stellen wir AppCache für unsichere Ursprünge ein. Wir gehen davon aus, dass es in Chrome 52 nur für Ursprünge funktioniert, die Inhalte über HTTPS bereitstellen.

Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler

AppCache ist eine Funktion, die Offline- und dauerhaften Zugriff auf einen Ursprung ermöglicht. Dies ist eine leistungsstarke Rechteausweitung für einen Cross-Site-Scripting-Angriff. Dies ist Teil eines größeren Projekts, bei dem leistungsstarke Funktionen für unsichere Ursprünge entfernt werden.

Chrome entfernt diesen Angriffsvektor, indem er nur über HTTPS zugelassen wird. Die HTTP-Unterstützung wird in Chrome 50 eingestellt und voraussichtlich in Chrome 52 vollständig entfernt.

Document.defaultCharset wurde entfernt

Zusammenfassung: document.defaultCharset wurde entfernt, um die Einhaltung der Spezifikationen zu verbessern.

Intent to remove | Chromestatus Tracker | CRBug-Problem

document.defaultCharset ist eine schreibgeschützte Eigenschaft, die in Chrome 49 eingestellt wurde. Sie gibt die Standardzeichencodierung des Systems des Nutzers basierend auf seinen regionalen Einstellungen zurück. Es hat sich als nicht sinnvoll erwiesen, diesen Wert beizubehalten, da Browser die Informationen zur Zeichencodierung in der HTTP-Antwort oder im in die Seite eingebetteten Meta-Tag verwenden.

Verwenden Sie stattdessen document.characterSet, um den ersten im HTTP-Header angegebenen Wert abzurufen. Wenn dieser nicht vorhanden ist, erhalten Sie den Wert, der im Attribut charset des <meta>-Elements angegeben ist (z. B. <meta charset="utf-8">). Wenn keiner davon verfügbar ist, ist document.characterSet die Systemeinstellung des Nutzers.

Weitere Informationen zu den Gründen, warum Sie dies nicht angeben, finden Sie in diesem GitHub-Problem.

Zusammenfassung: Der Wert „subresource“ wird für das rel-Attribut von HTMLLinkElement nicht mehr unterstützt.

Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler

Das subresource-Attribut in <link> sollte eine Ressource während der Inaktivität eines Browsers vorab laden. Nachdem ein Browser eine Seite heruntergeladen hat, konnte er dann Ressourcen wie andere Seiten vorab herunterladen, damit sie bei einer Nutzeranfrage einfach aus dem Browsercache abgerufen werden konnten.

Beim Attribut subresource sind mehrere Probleme aufgetreten. Erstens hat sie nie wie vorgesehen funktioniert. Die referenzierten Ressourcen wurden mit niedriger Priorität heruntergeladen. Das Attribut wurde nie in anderen Browsern als Chrome implementiert. Die Chrome-Implementierung hatte einen Fehler, der dazu führte, dass Ressourcen doppelt heruntergeladen wurden.

Entwickler, die die Nutzerfreundlichkeit durch das Vorabladen von Inhalten verbessern möchten, haben eine Reihe von Optionen. Die am besten anpassbare Option ist die Erstellung eines Dienst-Workers, um Pre-Caching und die Caches API zu nutzen. Weitere Lösungen sind andere Werte für das rel-Attribut, darunter preconnect, prefetch, preload und prerender. Einige dieser Optionen sind experimentell und werden möglicherweise nicht allgemein unterstützt.

Fallback auf unsichere TLS-Version entfernen

Zusammenfassung: Ein Mechanismus zum Erzwingen von Datenrückgaben über weniger sichere oder unsichere TLS-Versionen wird entfernt.

Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler

TLS (Transport Layer Security) unterstützt einen Mechanismus zur Versionsverhandlung, der die Einführung neuer TLS-Versionen ohne Kompatibilitätsprobleme ermöglicht. Einige Server haben dies so implementiert, dass Browser unsichere Endpunkte als Fallback verwenden mussten. Aus diesem Grund könnten Angreifer jede Website – nicht nur die falsch konfigurierte – dazu zwingen, schwächere Versionen von TLS auszuhandeln.

Betroffene Websites können keine Verbindung zu ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION herstellen. Administratoren müssen dafür sorgen, dass ihre Serversoftware auf dem neuesten Stand ist. Wenn das Problem weiterhin besteht, wenden Sie sich an den Anbieter der Serversoftware, um zu erfahren, ob es eine Lösung gibt.

KeyboardEvent.prototype.keyLocation entfernen

Zusammenfassung: Entfernen Sie einen nicht benötigten Alias aus dem Attribut Keyboard.prototype.location.

Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler

Dieses Attribut ist einfach ein Alias für das Attribut Keyboard.prototype.location, mit dem Tasten unterschieden werden können, die sich auf einer Tastatur an mehreren Stellen befinden. Mit beiden Attributen können Entwickler beispielsweise zwischen den beiden Enter-Tasten auf einer erweiterten Tastatur unterscheiden.

In RTCPeerConnection-Methoden erforderliche Fehler- und Erfolgs-Handler

Zusammenfassung: Für die WebRTC-RTCPeerConnection-Methoden createOffer() und createAnswer() sind jetzt sowohl ein Fehler- als auch ein Erfolgs-Handler erforderlich. Bisher war es möglich, diese Methoden nur mit einem Erfolgs-Handler aufzurufen. Diese Nutzung wurde eingestellt.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Programmfehler

In Chrome 49 wird jetzt eine Warnung angezeigt, wenn setLocalDescription() oder setRemoteDescription() aufgerufen wird, ohne dass ein Fehlerhandler angegeben wird. Das Argument „errorHandler“ ist seit Chrome 50 obligatorisch.

Dies ist Teil der Vorbereitung auf die Einführung von Promises für diese Methoden, wie in der WebRTC-Spezifikation gefordert.

Hier ist ein Beispiel aus der RTCPeerConnection-Demo von WebRTC (main.js, Zeile 126):

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

Sowohl setLocalDescription() als auch setRemoteDescription() haben einen Fehler-Handler. Ältere Browser, die nur einen Erfolgs-Handler erwarten, ignorieren das Argument für den Fehler-Handler einfach, wenn es vorhanden ist. Der Aufruf dieses Codes in einem älteren Browser führt nicht zu einer Ausnahme.

Im Allgemeinen empfehlen wir für WebRTC-Produktionsanwendungen die Verwendung von adapter.js, einem vom WebRTC-Projekt verwalteten Shim, um Anwendungen von Spezifikationsänderungen und Präfixunterschieden zu isolieren.

„XMLHttpRequestProgressEvent“ wird nicht mehr unterstützt

Zusammenfassung: Die XMLHttpRequestProgressEvent-Benutzeroberfläche wird zusammen mit den Attributen position und totalSize entfernt.

Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler

Dieses Ereignis sollte die Gecko-Kompatibilitätseigenschaften position und totalSize unterstützen. Alle drei werden in Mozilla 22 nicht mehr unterstützt und die Funktion wurde schon lange durch ProgressEvent ersetzt.

     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
        }
      }

Prefixed Encrypted Media Extensions entfernen

Zusammenfassung: Verschlüsselte Medienerweiterungen mit Präfix wurden entfernt und durch einen spezifikationsbasierten Ersatz ohne Präfix ersetzt.

Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler

In Chrome 42 wurde eine spezifikationsbasierte Version verschlüsselter Medienerweiterungen ohne Präfix eingeführt. Diese API wird verwendet, um Systeme zur digitalen Rechteverwaltung zur Verwendung mit HTMLMediaElement zu ermitteln, auszuwählen und mit ihnen zu interagieren.

Das war vor fast einem Jahr. Da die Version ohne Präfix mehr Funktionen bietet als die Version mit Präfix, ist es an der Zeit, die Version mit Präfix der API zu entfernen.

Unterstützung für SVGElement.offset-Attribute entfernen

Zusammenfassung: Offset-Eigenschaften für SVGElement wurden zugunsten der weiter unterstützten Attribute in HTMLElement verworfen.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Programmfehler

Offset-Properties werden seit langem sowohl von HTMLElement als auch von SVGElement unterstützt. Gecko und Edge unterstützen sie jedoch nur unter HTMLElement. Um die Konsistenz zwischen Browsern zu verbessern, wurden diese Properties in Chrome 48 eingestellt und werden jetzt entfernt.

Obwohl entsprechende Properties Teil von HTMLElement sind, können Entwickler, die eine Alternative suchen, auch getBoundingClientRect() verwenden.