API-verouderingen en -verwijderingen in Chrome 54

In bijna elke versie van Chrome zien we een aanzienlijk aantal updates en verbeteringen aan het product, de prestaties en ook de mogelijkheden van het webplatform. Dit artikel beschrijft de verouderingen en verwijderingen in Chrome 54, dat sinds 15 september in bèta is. Deze lijst kan op elk moment worden gewijzigd.

Navigatie uitschakelen in de unload-handler

TL;DR: Alle cross-origin navigatie wordt geblokkeerd in window.onunload event handlers om Chrome in lijn te brengen met de HTML-specificatie, evenals Firefox en Safari.

Intentie tot verwijderen | Chromestatus Tracker | Chromium-bug

Eerdere versies van Chrome stonden cross-origin navigatie toe binnen window.onunload door window.location.href = '#fragment' in te stellen. Volgens de HTML-specificatie zijn alleen in-page navigaties toegestaan ​​in de unload handlers, en in eerdere versies van Chrome werden andere navigatiemethoden geblokkeerd zoals vereist door de specificatie. Vanaf Chrome 54 worden dergelijke navigaties niet meer toegestaan ​​om ons in lijn te brengen met de specificatie, evenals Firefox en Safari.

HTTP/0.9 verouderd

TL;DR: HTTP/0.9 is verouderd. Ontwikkelaars moeten overstappen op een latere versie, bij voorkeur HTTP/2.

Intentie tot verwijderen | Chromestatus Tracker | Chromium-bug

HTTP/0.9 is de voorloper van HTTP/1.x . Het mist veel functies van zijn opvolgers. Een specifiek probleem voor het moderne web is het ontbreken van responsheaders. Zonder deze headers is er geen manier om te verifiëren of een HTTP/0.9-respons daadwerkelijk een HTTP/0.9-respons is. Dit kan verschillende problemen veroorzaken, waaronder:

  • Clients die bepaalde foutreacties behandelen als geldige HTTP/0.9-reacties.
  • Servers die de aanvraagsocket niet sluiten, zorgen ervoor dat clients reacties behandelen als een hangende GET die óf eeuwig actief blijft óf totdat een gebruiker navigeert vanaf een pagina die de aanvraag heeft gedaan.
  • Servers kunnen niet aan de browser doorgeven dat een verzoek is mislukt, wat problemen kan veroorzaken met de cacheheuristiek.

De enige waterdichte manier om problemen met HTTP/0.9 op te lossen, is door de ondersteuning volledig te verwijderen. Daarom is de ondersteuning voor HTTP/0.9 in Chrome 54 verwijderd.

Het gebruik van initTouchEvent is verwijderd

TL;DR : initTouchEvent is verouderd en vervangen door de TouchEvent constructor om de specificatie-naleving te verbeteren. Deze constructor wordt volledig verwijderd in Chrome 54.

Intentie tot verwijderen | Chromestatus Tracker | Chromium-bug

Ontwikkelaars kunnen al lange tijd synthetische aanraakgebeurtenissen in Chrome maken met behulp van de initTouchEvent API. Deze worden vaak gebruikt om aanraakgebeurtenissen te simuleren, bijvoorbeeld voor het testen of automatiseren van gebruikersinterfaces op uw site. Sinds Chrome 49 geeft deze verouderde API de volgende waarschuwing weer.

Waarschuwing voor aanraakgebeurtenis
TouchEvent.initTouchEvent is verouderd en wordt rond september 2016 verwijderd in M53. Gebruik in plaats daarvan de TouchEvent constructor. Zie https://www.chromestatus.com/features/5730982598541312 voor meer informatie.

Afgezien van het feit dat deze wijziging niet in de Touch Events-specificatie staat, zijn er een aantal redenen waarom deze wijziging goed is . De Chrome-implementatie van initTouchEvent was helemaal niet compatibel met Safari's initTouchEvent API en verschilde van die van Firefox op Android. Tot slot is de TouchEvent constructor veel gebruiksvriendelijker.

Om deze redenen hebben we besloten de specificatie te volgen in plaats van een API te onderhouden die noch gespecificeerd noch compatibel is met de enige andere implementatie. Ontwikkelaars die een alternatief nodig hebben, kunnen de TouchEvent constructor gebruiken.

Omdat de iOS- en Android/Chrome-implementaties van de initTouchEvent API zo enorm van elkaar verschilden, hadden sites vaak code in de trant van (en Firefox werd vaak vergeten)

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

Dit is vervelend, omdat het in de user-agent naar 'Android' zoekt en Chrome op Android deze veroudering zal herkennen en tegenkomen. Het kan echter nog niet worden verwijderd, omdat er nog een tijdje andere WebKit- en oudere Blink-gebaseerde browsers op Android zullen zijn die de oudere API moeten ondersteunen.

Om TouchEvent op het web correct te verwerken, moet u uw code aanpassen om Firefox, IE Edge en Chrome te ondersteunen. Controleer hiervoor of TouchEvent aanwezig is in het window . Als het object een positieve "lengte" heeft (wat aangeeft dat het een constructor is die een argument accepteert), moet u dat gebruiken.

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

KeyboardEvent.keyIdentifier-kenmerk verwijderd

TL;DR: De weinig ondersteunde eigenschap keyboardEvent.keyIdentifier wordt verwijderd ten gunste van de op standaarden gebaseerde eigenschap KeyboardEvent.key .

Intentie tot verwijderen | Chromestatus Tracker | Chromium-bug

Het kenmerk keyboardEvent.keyIdentifier maakte in 2009 en 2010 kortstondig deel uit van een W3C-specificatie. Het werd echter alleen in WebKit geïmplementeerd.

Ontwikkelaars die dit kenmerk moeten vervangen, kunnen de op standaarden gebaseerde eigenschap KeyboardEvent.key of de eigenschap KeyboardEvent.code gebruiken (zoals beschreven in een artikel dat we afgelopen voorjaar hebben gepubliceerd ). De eerste heeft de breedste implementatiebasis en wordt ondersteund door alle belangrijke desktopbrowsers behalve Safari. De laatste wordt momenteel ondersteund in Chrome, Firefox en Opera. Het verwijderen van deze functie is bedoeld om de acceptatie van de eigenschap KeyboardEvent.key te bevorderen. Apple heeft nog niet laten weten of dit zal worden ondersteund; de eveneens verouderde (maar nog niet uit Chrome verwijderde) eigenschappen KeyboardEvent.keyCode en KeyboardEvent.charCode zijn echter nog steeds beschikbaar in Safari.

Verwijder MediaStream-beëindigde gebeurtenis en kenmerk en on-beëindigd kenmerk

TL;DR: De ended gebeurtenis en het kenmerk en de onended gebeurtenis-handler worden verwijderd omdat ze uit de Media Capture en Streams-specificatie zijn verwijderd.

Intentie tot verwijderen | Chromestatus Tracker | Chromium-bug

Noch de ended gebeurtenis, noch de onended event handler maken al ongeveer drie jaar deel uit van de WebRTC-specificatie. Ontwikkelaars die gebeurtenissen willen volgen, kunnen MediaStreamTracks gebruiken in plaats van MediaStreams .

SVGSVGElement.viewPort afkeuren

De implementatie werkt sinds 2012 niet meer in Chrome. Het kenmerk is in andere browsers helemaal niet aanwezig en is uit de specificatie verwijderd. Om deze redenen wordt de eigenschap afgeschaft. Verwijdering wordt verwacht in Chrome 55.

Intentie tot verwijderen | Chromestatus Tracker | Chromium-bug

SVGViewElement.viewTarget verouderd

Het kenmerk SVGViewElement.viewTarget maakt geen deel uit van de SVG2.0-specificatie en wordt weinig of niet gebruikt. Dit kenmerk is verouderd in Chrome 54. Verwijdering wordt verwacht in Chrome 56.

Intentie tot verwijderen | Chromestatus Tracker | Chromium-bug

SVGZoomEvent verwijderen

De SVGZoomEvent maakt geen deel uit van de SVG2.0-specificatie en werkt niet in Chromium. Desondanks is de functie nog steeds detecteerbaar, wat tot verwarring bij ontwikkelaars kan leiden. De functie zal worden verwijderd.

Intentie tot verwijderen | Chromestatus Tracker | Chromium-bug