Abandon et suppression d'API dans Chrome 54

Dans presque toutes les versions de Chrome, un grand nombre de mises à jour et d'améliorations ont été apportées au produit, à ses performances et aux fonctionnalités de la plate-forme Web. Cet article décrit les abandons et les suppressions dans Chrome 54, en version bêta depuis le 15 septembre. Cette liste est susceptible d'être modifiée à tout moment.

Désactiver la navigation dans le gestionnaire de déchargement

Résumé:Toutes les navigations multi-origines ne seront pas autorisées dans les gestionnaires d'événements window.onunload afin d'aligner Chrome avec les spécifications HTML, ainsi que dans Firefox et Safari.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

Les versions précédentes de Chrome permettaient d'interrompre la navigation multi-origine dans window.onunload. en définissant window.location.href = '#fragment'. Conformément à la spécification HTML, seules les navigations au sein des pages sont autorisées dans les gestionnaires unload. Dans les versions précédentes de Chrome, d'autres méthodes de navigation étaient bloquées conformément à la spécification. À partir de Chrome 54, ces navigations ne seront plus autorisées pour nous mettre en conformité avec les spécifications ainsi que Firefox et Safari.

HTTP/0.9 obsolète

Résumé:HTTP/0.9 est obsolète. Les développeurs doivent passer à une version ultérieure, de préférence HTTP/2.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

HTTP/0.9 est le prédécesseur de HTTP/1.x. Il manque de nombreuses caractéristiques de ses successeurs. L'absence d'en-têtes de réponse est une préoccupation majeure pour le Web moderne. Sans eux, il n'existe aucun moyen de vérifier qu'une réponse HTTP/0.9 est bien une réponse HTTP/0.9. Cela peut causer plusieurs problèmes. Exemples de problèmes rencontrés:

  • Les clients qui traitent certaines réponses d'erreur comme des réponses HTTP/0.9 valides.
  • Les serveurs qui ne parviennent pas à fermer le socket de requête, ce qui oblige les clients à traiter les réponses comme des requêtes GET suspendues, qui restent actives de façon éternelle ou jusqu'à ce que l'utilisateur navigue à partir d'une page qui a émis la requête.
  • Les serveurs ne pouvant pas indiquer au navigateur qu'une requête a échoué, ce qui peut causer des problèmes avec les méthodes heuristiques de mise en cache.

Le seul moyen infaillible de résoudre les problèmes liés au protocole HTTP/0.9 est de supprimer complètement cette compatibilité. C'est pourquoi le protocole HTTP/0.9 n'est plus pris en charge dans Chrome 54.

L'utilisation de initTouchEvent est supprimée

Résumé : initTouchEvent a été abandonné au profit de TouchEvent constructor pour améliorer la conformité des spécifications. Cet élément sera entièrement supprimé dans Chrome 54.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

Depuis longtemps, les développeurs peuvent créer des événements tactiles synthétiques dans Chrome à l'aide de l'API initTouchEvent. Ils sont fréquemment utilisés pour simuler des événements tactiles, soit pour tester, soit pour automatiser certaines interfaces utilisateur de votre site. Depuis Chrome 49, cette API obsolète a affiché l'avertissement suivant .

Avertissement d'événement tactile
TouchEvent.initTouchEvent est obsolète et sera supprimé dans M53 vers septembre 2016. Veuillez plutôt utiliser le constructeur TouchEvent. Pour en savoir plus, consultez https://www.chromestatus.com/features/5730982598541312.

En plus de ne pas respecter la spécification des événements tactiles, ce changement est bénéfique pour plusieurs raisons. L'implémentation Chrome de initTouchEvent n'était pas du tout compatible avec l'API initTouchEvent de Safari et était différente de Firefox sur Android. Enfin, le constructeur TouchEvent est beaucoup plus facile à utiliser.

C'est pourquoi nous avons décidé de suivre les spécifications plutôt que de gérer une API qui n'est ni spécifiée, ni compatible avec l'autre implémentation. Les développeurs qui ont besoin d'une alternative doivent utiliser le constructeur TouchEvent.

Étant donné que les implémentations iOS et Android/Chrome de l'API initTouchEvent étaient très différentes, les sites comportaient souvent du code de type (oubliant fréquemment Firefox).

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

Ce n'est pas le cas, car la recherche "Android" dans le user-agent et l'application Chrome sur Android correspondront à cet abandon. Il n'est pas encore possible de la supprimer, car d'autres navigateurs WebKit et d'anciens navigateurs basés sur Blink sur Android resteront compatibles avec l'ancienne API pendant un certain temps.

Pour gérer correctement les TouchEvent sur le Web, vous devez modifier votre code afin qu'il soit compatible avec Firefox, IE Edge et Chrome. Pour ce faire, vérifiez l'existence de TouchEvent sur l'objet window. Si sa "longueur" est positive (indiquant qu'il s'agit d'un constructeur qui accepte un argument), vous devez l'utiliser.

    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 supprimé

Résumé:La propriété keyboardEvent.keyIdentifier, peu acceptée, est supprimée au profit de la propriété KeyboardEvent.key, basée sur des normes.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

L'attribut keyboardEvent.keyIdentifier a fait partie brièvement d'une spécification W3C en 2009 et 2010. Cependant, il n'a été implémenté que dans WebKit.

Les développeurs qui doivent remplacer cet attribut peuvent utiliser la propriété KeyboardEvent.key basée sur les standards ou la propriété KeyboardEvent.code (comme décrit dans un article publié au printemps dernier). Le premier a la base d'implémentation la plus large : il est compatible avec tous les principaux navigateurs pour ordinateur, à l'exception de Safari. La version plus récente est actuellement compatible avec Chrome, Firefox et Opera. La suppression de cette fonctionnalité vise à favoriser l'adoption de la propriété KeyboardEvent.key. Apple ne sait pas si cette fonctionnalité sera prise en charge, mais les propriétés KeyboardEvent.keyCode et KeyboardEvent.charCode obsolètes (mais pas encore supprimées de Chrome) restent disponibles dans Safari.

Suppression de l'événement et de l'attribut MediaStream terminés, ainsi que l'attribut "onended"

Résumé:L'événement et l'attribut ended ainsi que le gestionnaire d'événements onended sont en cours de suppression, car ils ont été retirés de la spécification Media Capture and Streams.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

Ni l'événement ended, ni le gestionnaire d'événements onended ne font partie de la spécification WebRTC depuis environ trois ans. Les développeurs qui souhaitent regarder des événements doivent utiliser MediaStreamTracks au lieu de MediaStreams.

Abandon de SVGSVGElement.viewPort

L'implémentation ne fonctionne plus dans Chrome depuis 2012. L'attribut n'existe pas du tout dans les autres navigateurs et a été supprimé de la spécification. C'est pourquoi la propriété est obsolète. Cette suppression est prévue dans Chrome 55.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

Abandon de SVGViewElement.viewTarget

L'attribut SVGViewElement.viewTarget ne fait pas partie de la spécification SVG2.0 et son utilisation est faible ou inexistante. Cet attribut est obsolète dans Chrome 54. Cette suppression est prévue dans Chrome 56.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium

Supprimer SVGZoomEvent

Le SVGZoomEvent ne fait pas partie de la spécification SVG2.0 et ne fonctionne pas dans Chromium. Bien que la fonctionnalité reste détectable, ce qui peut prêter à confusion pour les développeurs. Elle sera supprimée.

Intention de suppression | Outil de suivi Chromestatus | Bug Chromium