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 Änderungen und Entfernungen in Chrome 54 beschrieben, das seit dem 15. September als Betaversion verfügbar ist. Diese Liste kann sich jederzeit ändern.

Navigationen im Unload-Handler deaktivieren

Kurzfassung:Alle ursprungsübergreifenden Navigations werden in window.onunload-Event-Handlern nicht mehr zugelassen, um Chrome an die HTML-Spezifikation sowie Firefox und Safari anzupassen.

Absicht zum Entfernen | Chromestatus Tracker | Chromium-Fehler

In früheren Versionen von Chrome konnte die ursprungsübergreifende Navigation in window.onunload unterbrochen werden. indem Sie window.location.href = '#fragment' festlegen. Gemäß der 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 sind solche Navigationen nicht mehr zulässig, um die Spezifikation sowie Firefox und Safari zu berücksichtigen.

HTTP/0.9 ist veraltet

Kurz gesagt:HTTP/0.9 ist veraltet. Entwickler sollten auf eine neuere Version umstellen, vorzugsweise HTTP/2.

Absicht zum Entfernen | Chromestatus Tracker | Chromium-Fehler

HTTP/0.9 ist der Vorgänger von HTTP/1.x. Es fehlen viele Funktionen, die seine Nachfolger bieten. Ein besonderes Problem des modernen Webs ist das Fehlen von Antwortheadern. Ohne sie lässt sich nicht überprüfen, ob eine HTTP/0.9-Antwort wirklich eine HTTP/0.9-Antwort ist. Das kann zu verschiedenen Problemen führen. Beispiele:

  • Clients, die bestimmte Fehlerantworten als gültige HTTP/0.9-Antworten behandeln.
  • Server, die das Anforderungssocket nicht schließen, sodass Clients Antworten als hängende GET-Anfragen behandeln, die entweder unendlich lange aktiv bleiben oder bis ein Nutzer die Seite verlässt, auf der die Anfrage gestellt wurde.
  • Server, die dem Browser nicht mitteilen können, dass eine Anfrage fehlgeschlagen ist. Dies kann zu Problemen mit Caching-Heuristiken führen.

Die einzige narrensichere Methode zur Behebung von Problemen mit HTTP/0.9 besteht darin, die Unterstützung vollständig zu entfernen. Aus diesem Grund wird die Unterstützung für HTTP/0.9 in Chrome 54 entfernt.

Die Verwendung von initTouchEvent wurde entfernt

Kurzfassung: initTouchEvent wurde zugunsten von TouchEvent constructor eingestellt, um die Spezifikationskonformität zu verbessern, und wird in Chrome 54 vollständig entfernt.

Absicht zum Entfernen | Chromestatus Tracker | Chromium-Fehler

Entwickler können schon seit Langem synthetische Touch-Ereignisse in Chrome mit der initTouchEvent API erstellen. Sie werden häufig verwendet, um Touch-Ereignisse zu simulieren, entweder zum Testen oder zum Automatisieren einiger Benutzeroberflächen auf Ihrer Website. Seit Chrome 49 wird für diese eingestellte API die folgende Warnung angezeigt .

Warnung: Touch-Ereignis
TouchEvent.initTouchEvent ist veraltet und wird in M53 entfernt, voraussichtlich im September 2016. Verwenden Sie stattdessen den Konstruktor TouchEvent. Weitere Informationen finden Sie unter https://www.chromestatus.com/features/5730982598541312.

Abgesehen davon, dass diese Änderung nicht in der Touch Events-Spezifikation enthalten ist, gibt es eine Reihe von Gründen, warum diese Änderung sinnvoll ist. Die Chrome-Implementierung von initTouchEvent war überhaupt nicht mit der initTouchEvent API von Safari kompatibel und unterschied sich von der von Firefox unter Android. Und schließlich ist der TouchEvent-Konstruktor viel einfacher zu verwenden.

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

Da die Implementierungen der initTouchEvent API für iOS und Android/Chrome so unterschiedlich waren, enthielten Websites häufig Code wie (Firefox wurde oft 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, weil im User-Agent nach „Android“ gesucht wird und Chrome unter Android übereinstimmt und diese Einstellung erreicht. Sie kann jedoch noch nicht entfernt werden, da es auf Android noch eine Weile andere Browser auf Basis von WebKit und älteren Blink-Versionen geben wird, für die Sie die alte API weiterhin unterstützen müssen.

Damit TouchEvents im Web korrekt verarbeitet werden, sollten Sie Ihren Code so ändern, dass Firefox, IE Edge und Chrome unterstützt werden. Prüfen Sie dazu, ob TouchEvent im window-Objekt vorhanden ist. Wenn die Länge positiv ist (was darauf hindeutet, dass es sich um einen Konstruktor handelt, der ein Argument akzeptiert), sollten Sie es verwenden.

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

Das Attribut „KeyboardEvent.keyIdentifier“ wurde entfernt

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

Absicht zum Entfernen | Chromestatus Tracker | Chromium-Fehler

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

Entwickler, die dieses Attribut ersetzen müssen, können entweder das standardbasierte Attribut KeyboardEvent.key oder das Attribut KeyboardEvent.code verwenden (wie in diesem Artikel vom letzten Frühjahr beschrieben). Ersteres hat die breiteste Implementierungsbasis und wird von allen wichtigen Desktopbrowsern außer Safari unterstützt. Letzteres wird derzeit in Chrome, Firefox und Opera unterstützt. Durch die Entfernung dieser Funktion soll die Verwendung der KeyboardEvent.key-Property gefördert werden. Apple hat sich noch nicht dazu geäußert, ob diese Funktion unterstützt wird. Die ebenfalls eingestellten (aber noch nicht aus Chrome entfernten) Eigenschaften KeyboardEvent.keyCode und KeyboardEvent.charCode sind jedoch weiterhin in Safari verfügbar.

Entfernen des Ereignisses „MediaStream ended“ und des Attributs „onended“

Kurz gesagt:Das ended-Ereignis und ‑Attribut sowie der onended-Ereignishandler werden entfernt, weil sie aus der Media Capture and Streams-Spezifikation entfernt wurden.

Absicht zum Entfernen | Chromestatus Tracker | Chromium-Fehler

Weder das ended-Ereignis noch der onended-Ereignishandler sind seit etwa drei Jahren Teil der WebRTC-Spezifikation. Entwickler, die Ereignisse beobachten möchten, sollten MediaStreamTracks anstelle von MediaStreams verwenden.

SVGSVGElement.viewPort einstellen

Die Implementierung hat seit 2012 nicht mehr in Chrome funktioniert. Das Attribut ist in anderen Browsern überhaupt nicht vorhanden und wurde aus der Spezifikation entfernt. Aus diesen Gründen wird das Attribut eingestellt. Die Entfernung ist für Chrome 55 vorgesehen.

Absicht zum Entfernen | Chromestatus Tracker | Chromium-Fehler

SVGViewElement.viewTarget einstellen

Das Attribut SVGViewElement.viewTarget ist nicht Teil der SVG2.0-Spezifikation und wird nur selten oder gar nicht verwendet. Dieses Attribut ist in Chrome 54 veraltet. Die Entfernung ist für Chrome 56 vorgesehen.

Absicht zum Entfernen | Chromestatus Tracker | Chromium-Fehler

SVGZoomEvent entfernen

Das SVGZoomEvent ist nicht Teil der SVG2.0-Spezifikation und funktioniert nicht in Chromium. Trotzdem ist die Funktion noch erkennbar, was bei Entwicklern zu Verwirrung führen kann. Sie wird entfernt.

Absicht zum Entfernen | Chromestatus Tracker | Chromium-Fehler