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 diesem Artikel werden die Einstellung und Entfernung von Funktionen in Chrome 60 beschrieben, das seit dem 8. Juni in der Betaphase ist. Diese Liste kann sich jederzeit ändern.
Sicherheit
Für crypto.subtle ist jetzt ein sicherer Ursprung erforderlich
Die Web Crypto API, die seit Chrome 37 unterstützt wird, funktionierte immer bei nicht sicheren Ursprüngen. Gemäß der langjährigen Chrome-Richtlinie, sichere Ursprünge für leistungsstarke Funktionen zu bevorzugen, ist crypto.subtle
nicht nur für sichere Ursprünge sichtbar.
Intent to Remove | Chromium-Fehler
Vom Inhalt initiierte Navigationen im oberen Frame zu Daten-URLs entfernen
Da nicht technisch versierte Browsernutzer das data:
-Schema nicht kennen, wird es immer häufiger bei Spoofing- und Phishing-Angriffen verwendet. Um dies zu verhindern, blockieren wir das Laden von data:
-URLs auf Webseiten im oberen Frame. Das gilt für <a>
-Tags, window.open
, window.location
und ähnliche Mechanismen. Das data:
-Schema funktioniert weiterhin für Ressourcen, die von einer Seite geladen werden.
Diese Funktion wurde in Chrome 58 eingestellt und ist jetzt entfernt.
Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler
navigator.sendBeacon() für einige Blobs vorübergehend deaktivieren
Die Funktion navigator.sendBeacon()
ist seit Chrome 39 verfügbar.
Bei der ursprünglichen Implementierung konnte das data
-Argument der Funktion beliebige Blobs enthalten, deren Typ nicht auf der CORS-Safelist steht. Wir sind der Meinung, dass dies eine potenzielle Sicherheitsbedrohung darstellt, auch wenn noch niemand versucht hat, sie auszunutzen. Da wir KEINE angemessene sofortige Lösung dafür haben, kann sendBeacon()
vorübergehend nicht mehr auf Blobs aufgerufen werden, deren Typ NICHT auf der CORS-Safelist steht.
Diese Änderung wurde zwar für Chrome 60 implementiert, aber inzwischen wieder in Chrome 59 zusammengeführt.
CSS
Schattendurchdringender Abkömmling-Kombinator soll sich wie Abkömmling-Kombinator verhalten
Der Schattendurchdringende Nachkommen-Kombinator (>>>
), Teil des CSS-Skalierungsmoduls der 1. Ebene, sollte die untergeordneten Elemente eines bestimmten übergeordneten Elements auch dann abgleichen, wenn sie sich in einem Schattenbaum befanden. Das hatte einige Einschränkungen.
Erstens: Gemäß der Spezifikation konnte es nur in JavaScript-Aufrufen wie querySelector()
verwendet werden und funktionierte nicht in Stylesheets. Noch wichtiger ist, dass Browseranbieter es nicht geschafft haben, es über eine Ebene des Shadow DOM hinaus zu implementieren.
Daher wurde der Abkömmling-Kombinator aus den entsprechenden Spezifikationen entfernt, einschließlich Shadow DOM v1. Anstatt Webseiten zu beeinträchtigen, indem wir diesen Selector aus Chromium entfernen, haben wir stattdessen den Alias des Schatten durchdringenden Nachkommen-Kombinators dem Nachkommen-Kombinator zugewiesen. Das ursprüngliche Verhalten wurde in Chrome 45 eingestellt. Das neue Verhalten ist in Chrome 61 implementiert.
Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler
JavaScript
RTCPeerConnection.getStreamById() einstellen und entfernen
Vor fast zwei Jahren wurde getStreamById()
aus der WebRTC-Spezifikation entfernt. Die meisten anderen Browser haben diese Funktion bereits aus ihren Implementierungen entfernt. Diese Funktion wird zwar vermutlich nur selten verwendet, es besteht jedoch ein geringes Risiko für die Interoperabilität mit Edge und WebKit-basierten Browsern außer Safari, in dem getStreamById()
weiterhin unterstützt wird. Entwickler, die eine alternative Implementierung benötigen, finden unten im Intent to Remove Beispielcode.
Die Funktion wird in Chrome 62 entfernt.
Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler
SVGPathElement.getPathSegAtLength eingestellt
Vor mehr als zwei Jahren wurde getPathSegAtLength()
aus der SVG-Spezifikation entfernt. Da es nur wenige Treffer für diese Methode in httparchive gibt, wird sie in Chrome 60 eingestellt. Die Entfernung erfolgt voraussichtlich in Chrome 62, das Anfang oder Mitte Oktober veröffentlicht wird.
Beabsichtigte Einstellung | Chromestatus-Tracker | Chromium-Fehler
getContextAttributes() hinter ein Flag verschieben
Die Funktion getContextAttributes()
wird seit 2013 auf CanvasRenderingContext2D
unterstützt. Die Funktion war jedoch nicht Teil eines Standards und ist es auch seitdem nicht geworden. Sie sollte über das Befehlszeilen-Flag --enable-experimental-canvas-features
implementiert werden, wurde aber fälschlicherweise nicht implementiert. In Chrome 60 wurde dieser Fehler korrigiert. Es wird davon ausgegangen, dass diese Änderung sicher ist, da es keine Daten gibt, die darauf hinweisen, dass jemand die Methode verwendet.
Entfernen Sie Headers.prototype.getAll().
Die Funktion Headers.prototype.getAll()
wird gemäß der neuesten Version der Abrufsspezifikation entfernt.
Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler
indexedDB.webkitGetDatabaseNames() entfernen
Wir haben diese Funktion hinzugefügt, als die Indexierte Datenbank noch relativ neu in Chrome war und Präfixe sehr beliebt waren. Die API gibt asynchron eine Liste der vorhandenen Datenbanknamen in einem Ursprung zurück, was sinnvoll erschien.
Leider ist das Design fehlerhaft, da die Ergebnisse möglicherweise schon veraltet sind, sobald sie zurückgegeben werden. Daher kann es nur für die Protokollierung, nicht aber für eine ernsthafte Anwendungslogik verwendet werden. Das GitHub-Problem enthält Verweise auf frühere Diskussionen zu Alternativen, die einen anderen Ansatz erfordern würden. Es gab zwar immer wieder mal Interesse von Entwicklern, aber aufgrund der mangelnden browserübergreifenden Fortschritte wurde das Problem von Bibliotheksautoren umgangen.
Entwickler, die diese Funktion benötigen, müssen ihre eigene Lösung entwickeln. Bibliotheken wie Dexie.js verwenden beispielsweise eine globale Tabelle, die selbst eine weitere Datenbank ist, um die Namen von Datenbanken zu erfassen.
Diese Funktion wurde in Chrome 58 eingestellt und ist jetzt entfernt.
Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler
WEBKIT_KEYFRAMES_RULE und WEBKIT_KEYFRAME_RULE entfernen
Die nicht standardmäßigen Konstanten WEBKIT_KEYFRAMES_RULE
und WEBKIT_KEYFRAME_RULE
werden aus der CSS-Regel entfernt.
Entwickler sollten stattdessen KEYFRAMES_RULE
und KEYFRAME_RULE
verwenden.
Entfernung geplant | Chromestatus-Tracker | Chromium-Fehler
Benutzeroberfläche
Nutzerinteraktion für „beforeunload“-Dialogfelder erforderlich machen
Ab Chrome 60 wird das beforeunload
-Dialogfeld nur angezeigt, wenn der Frame, in dem es angezeigt werden soll, eine Nutzergeste oder Nutzerinteraktion erhalten hat (oder wenn ein eingebetteter Frame eine solche Geste erhalten hat). Hinweis: Das Ereignis beforeunload
wird weiterhin gesendet. Es ändert sich nur, ob das Dialogfeld angezeigt wird.
Das Dialogfeld beforeunload
ist ein modales App-Dialogfeld. Daher ist es von Natur aus nutzerfeindlich, d. h., es reagiert auf die Navigation des Nutzers, indem es seine Entscheidung infrage stellt. Es gibt positive Verwendungsmöglichkeiten für diese Funktion. Sie werden beispielsweise häufig verwendet, um Nutzer zu warnen, wenn sie durch die Navigation Daten verlieren.
Die Möglichkeit, auf einer Seite Text für das beforeunload
-Dialogfeld anzugeben, wurde vor einiger Zeit entfernt. beforeunload
-Dialogfelder sind jedoch weiterhin ein Missbrauchsvektor. Insbesondere beforeunload
-Dialogfelder sind ein Bestandteil von betrügerischen Websites, auf denen automatisch abgespielte Audioinhalte und bedrohliche Texte einen Kontext schaffen, in dem die von Chromium bereitgestellte Meldung „Sind Sie sicher, dass Sie diese Seite verlassen möchten?“ besorgniserregend wird.
Wir möchten den Dialog beforeunload
nur für sinnvolle Zwecke zulassen. Ein Dialogfeld eignet sich gut, wenn der Nutzer einen Status hat, der verloren gehen könnte. Wenn der Nutzer noch nie mit der Seite interagiert hat, kann er keinen Status haben, der verloren gehen könnte. Daher besteht kein Risiko für den Verlust von Nutzerdaten, wenn das Dialogfeld in diesem Fall ausgeblendet wird.