API-Einstellungen und -Entfernungen in Chrome 54

In fast jeder Version von Chrome gibt es eine beträchtliche Anzahl von Updates und Verbesserungen des Produkts, seiner Leistung und auch der Funktionen der Webplattform. In diesem Artikel werden die Einstellungen in Chrome 54 beschrieben, die sich am 15. September in der Betaphase befinden. Diese Liste kann sich jederzeit ändern.

Navigationen im Unload-Handler deaktivieren

Kurzfassung: Alle ursprungsübergreifenden Navigationen sind in window.onunload-Event-Handlern nicht zulässig, um Chrome an die HTML-Spezifikationen sowie Firefox und Safari anzupassen.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Fehler

In früheren Chrome-Versionen konnte die ursprungsübergreifende Navigation in window.onunload unterbrochen werden. indem Sie window.location.href = '#fragment' festlegen. Laut HTML-Spezifikation sind in den Unload-Handlern nur In-Page-Navigationen zulässig. In früheren Versionen von Chrome wurden andere Navigationsmethoden gemäß der Spezifikation blockiert. Ab Chrome 54 ist es nicht mehr möglich, durch solche Navigationen den Spezifikationen sowie Firefox und Safari gerecht zu werden.

HTTP/0.9 eingestellt

TL;DR:HTTP/0.9 wurde eingestellt. Entwickler sollten auf eine neuere Version umstellen, vorzugsweise HTTP/2.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Fehler

HTTP/0.9 ist der Vorgänger von HTTP/1.x. Es fehlen viele Funktionen seiner Nachfolger. Ein besonderes Problem beim modernen Web ist, dass es keine Antwortheader gibt. Ohne sie kann nicht überprüft werden, ob eine HTTP/0.9-Antwort tatsächlich eine HTTP/0.9-Antwort ist. Dies kann zu mehreren Problemen führen. Beispiele:

  • Clients, die bestimmte Fehlerantworten als gültige HTTP/0.9-Antworten behandeln.
  • Server, die den Anfrage-Socket nicht schließen, führen dazu, dass Clients die Antworten als hängende GET-Anfragen behandeln, die entweder für immer aktiv bleiben oder bis ein Nutzer eine Seite verlässt, von der die Anfrage gesendet wurde.
  • Server, die dem Browser nicht mitteilen können, dass eine Anfrage fehlgeschlagen ist, was zu Problemen mit Caching-Heuristiken führen kann.

Die einzige sichere Möglichkeit, Probleme mit HTTP/0.9 zu beheben, besteht darin, den Support vollständig zu entfernen. Aus diesem Grund wird HTTP/0.9 in Chrome 54 nicht mehr unterstützt.

Die Verwendung von initTouchEvent wurde entfernt

Zusammenfassung: initTouchEvent wurde zugunsten von TouchEvent constructor eingestellt, um die Compliance der Spezifikationen zu verbessern. In Chrome 54 wird es vollständig entfernt.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Fehler

Schon seit Langem können Entwickler mithilfe der initTouchEvent API synthetische Touch-Ereignisse in Chrome erstellen. Sie werden häufig verwendet, um Touch-Ereignisse zu simulieren, um einige UIs auf deiner Website zu testen oder zu automatisieren. Seit Chrome 49 wird bei diesem veralteten API die folgende Warnung angezeigt .

Warnung zu Touch-Ereignis
TouchEvent.initTouchEvent wurde verworfen und wird in M53 um September 2016 entfernt. Verwenden Sie stattdessen den Konstruktor TouchEvent. Weitere Informationen findest du unter https://www.chromestatus.com/features/5730982598541312.

Neben der fehlenden Spezifikation für Touch-Ereignisse gibt es eine Reihe von Gründen, warum diese Änderung gut ist. Die Chrome-Implementierung von initTouchEvent war überhaupt nicht mit der initTouchEvent API von Safari kompatibel und unterschied sich von Firefox unter Android. Außerdem ist der TouchEvent-Konstruktor viel einfacher zu verwenden.

Aus diesen Gründen haben wir uns entschieden, uns an die Spezifikation zu halten, anstatt eine API beizubehalten, die weder spezifiziert noch mit der einzigen anderen Implementierung kompatibel ist. Entwickler, die eine Alternative benötigen, sollten den TouchEvent-Konstruktor verwenden.

Da sich die Implementierungen der initTouchEvent API sehr stark von iOS und Android/Chrome unterscheiden, enthielten Websites oft einen Code in diesem Stil (Firefox wurde häufig vergessen)

    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);

Das ist schlecht, da im User-Agent nach „Android“ gesucht wird und Chrome unter Android übereinstimmt und diese Einstellung erreicht wird. Es kann jedoch noch nicht entfernt werden, da es unter Android noch eine Zeit lang andere WebKit- und ältere Blink-basierte Browser gibt, in denen die ältere API unterstützt werden muss.

Damit TouchEvents im Web richtig verarbeitet werden können, müssen Sie Ihren Code so ändern, dass er Firefox, IE Edge und Chrome unterstützt. Prüfen Sie dazu, ob TouchEvent im window-Objekt vorhanden ist und ob es eine positive „Länge“ hat, was bedeutet, dass es sich um einen Konstruktor handelt, der ein Argument verwendet.

    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);

Attribut „KeyboardEvent.keyIdentifier“ wurde entfernt

Kurzfassung: Die wenig unterstützte keyboardEvent.keyIdentifier-Property wird zugunsten der standardbasierten KeyboardEvent.key-Property entfernt.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Fehler

Das Attribut keyboardEvent.keyIdentifier war 2009 und 2010 kurz Teil einer W3C-Spezifikation. Sie wurde jedoch nur in WebKit implementiert.

Entwickler, die dieses Attribut ersetzen müssen, können entweder die standardbasierte KeyboardEvent.key-Property oder die KeyboardEvent.code-Property verwenden. Weitere Informationen dazu finden Sie in einem Artikel vom letzten Frühjahr. Erstere hat die breiteste Implementierungsbasis und wird von allen gängigen Desktop-Browsern außer Safari unterstützt. Die neuere Version wird derzeit von Chrome, Firefox und Opera unterstützt. Wenn Sie diese Funktion entfernen, soll die Akzeptanz der Property „KeyboardEvent.key“ gesteigert werden. Apple steht noch nicht fest, ob diese Funktion unterstützt wird. Die ebenfalls eingestellten, aber noch nicht aus Chrome entfernten Eigenschaften KeyboardEvent.keyCode und KeyboardEvent.charCode sind in Safari weiterhin verfügbar.

Beendetes MediaStream-Ereignis und Attribut sowie Attribut „onended“ entfernen

Kurzfassung: Das ended-Ereignis und -Attribut sowie der onended-Event-Handler werden entfernt, da sie aus den Media Capture- und Streams-Spezifikationen entfernt wurden.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Fehler

Weder das ended-Ereignis noch der onended-Event-Handler sind seit etwa drei Jahren Teil der WebRTC-Spezifikation. Entwickler, die sich Veranstaltungen ansehen möchten, sollten MediaStreamTracks statt MediaStreams verwenden.

SVGSVGElement.viewPort verwerfen

Seit 2012 funktioniert die Implementierung in Chrome nicht mehr. Das Attribut ist in anderen Browsern überhaupt nicht vorhanden und wurde aus der Spezifikation entfernt. Aus diesen Gründen wird die Property eingestellt. Diese Funktion wird voraussichtlich in Chrome 55 entfernt.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Fehler

„SVGViewElement.viewTarget“ verwerfen

Das Attribut SVGViewElement.viewTarget ist nicht Teil der SVG2.0-Spezifikation und wird nur geringfügig oder nicht verwendet. Dieses Attribut wurde in Chrome 54 eingestellt. Diese Funktion wird voraussichtlich in Chrome 56 entfernt.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Fehler

SVGZoomEvent entfernen

SVGZoomEvent ist nicht Teil der SVG2.0-Spezifikation und funktioniert in Chromium nicht. Trotz der Tatsache, dass die Funktion immer noch funktionsfähig ist, kann dies bei Entwicklern zu Verwirrung führen. Sie wird entfernt.

Entfernungsabsicht | Chromestatus-Tracker | Chromium-Fehler