Bajas y eliminaciones de APIs en Chrome 54

En casi todas las versiones de Chrome, vemos una cantidad significativa de actualizaciones y mejoras en el producto, su rendimiento y también las capacidades de la plataforma web. En este artículo, se describen las bajas y las eliminaciones en Chrome 54, que está en versión beta a partir del 15 de septiembre. Esta lista está sujeta a cambios en cualquier momento.

Inhabilitar las navegaciones en el controlador de descargas

Resumen: No se permitirán todas las navegaciones de origen cruzado en los controladores de eventos window.onunload para que Chrome esté intercalado con la especificación HTML, así como en Firefox y Safari.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

Las versiones anteriores de Chrome permitían que se interrumpiera la navegación de origen cruzado en window.onunload. estableciendo window.location.href = '#fragment'. De acuerdo con la especificación HTML, solo se permite la navegación en la página en los controladores de descarga. En versiones anteriores de Chrome, se bloquearon otros métodos de navegación según lo requerido por la especificación. A partir de Chrome 54, estas navegaciones no estarán permitidas para que podamos cumplir con la especificación, así como con Firefox y Safari.

HTTP/0.9 obsoleto

TL;DR: HTTP/0.9 está obsoleto. Los desarrolladores deben usar una versión posterior, preferentemente HTTP/2.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

HTTP/0.9 es el predecesor de HTTP/1.x. Carece de muchas características de sus sucesores. Una preocupación particular de la Web moderna es la falta de encabezados de respuesta. Sin ellas, no hay forma de verificar que una respuesta HTTP/0.9 sea realmente una respuesta HTTP/0.9. Esto puede causar varios problemas. Los ejemplos incluyen, entre otros problemas:

  • Clientes que tratan ciertas respuestas de error como respuestas HTTP/0.9 válidas.
  • Son servidores que no pueden cerrar el socket de solicitud, lo que provoca que los clientes traten las respuestas como un GET pendiente que permanece activo para siempre o hasta que un usuario navega desde una página que realizó la solicitud.
  • Son los servidores que no pueden indicar al navegador que falló una solicitud, lo que puede causar problemas con la heurística del almacenamiento en caché.

La única forma infalible de solucionar problemas con HTTP/0.9 es quitar la compatibilidad por completo. Por ese motivo, la compatibilidad con HTTP/0.9 se elimina en Chrome 54.

Se quitó el uso de initTouchEvent

Resumen: initTouchEvent dejó de estar disponible y se reemplazó por TouchEvent constructor para mejorar el cumplimiento de las especificaciones y se quitará por completo en Chrome 54.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

Durante mucho tiempo, los desarrolladores pudieron crear eventos táctiles sintéticos en Chrome con la API de initTouchEvent. Con frecuencia, se usan para simular eventos táctiles y así probar o automatizar algunas IUs en tu sitio. A partir de Chrome 49, esta API obsoleta muestra la siguiente advertencia .

Advertencia de evento táctil
TouchEvent.initTouchEvent dejó de estar disponible y se quitará en M53, alrededor de septiembre de 2016. En su lugar, usa el constructor TouchEvent. Para obtener más información, consulta https://www.chromestatus.com/features/5730982598541312.

Además de no estar en la especificación de eventos táctiles, existen varios motivos por los que este cambio es bueno. La implementación de initTouchEvent de Chrome no era compatible en absoluto con la API de initTouchEvent de Safari y era diferente a Firefox en Android. Por último, el constructor TouchEvent es mucho más fácil de usar.

Por estas razones, decidimos seguir las especificaciones en lugar de mantener una API que no se especifique ni sea compatible con la única otra implementación. Los desarrolladores que necesiten una alternativa deben usar el constructor TouchEvent.

Debido a que las implementaciones de la API de initTouchEvent para iOS y Android/Chrome eran muy diferentes, los sitios a menudo tenían código similar al (a menudo olvidamos 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);

Esto es malo, ya que busca "Android" en el usuario-agente, y Chrome en Android coincidirá y se dará de baja. Sin embargo, todavía no se puede quitar, dado que habrá otros navegadores basados en WebKit y Blink anteriores en Android por un tiempo, y deberás admitir la API anterior.

A fin de controlar correctamente los elementos TouchEvent en la Web, debes cambiar tu código para que admita Firefox, IE Edge y Chrome. Para ello, verifica la existencia de TouchEvent en el objeto window y, si tiene una "longitud" positiva (lo que indica que es un constructor que toma un argumento), debes usarlo.

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

Se quitó el atributo KeyboardEvent.keyIdentifier.

Resumen: Se quitará la propiedad keyboardEvent.keyIdentifier con poca compatibilidad para favorecer la propiedad KeyboardEvent.key basada en estándares.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

El atributo keyboardEvent.keyIdentifier formó parte brevemente de una especificación del W3C en 2009 y 2010. Sin embargo, solo se implementó en WebKit.

Los desarrolladores que necesiten reemplazar este atributo pueden usar la propiedad KeyboardEvent.key basada en estándares o la propiedad KeyboardEvent.code (como se describe en un artículo que hicimos la primavera pasada). El primero tiene la base de implementación más amplia, ya que es compatible con todos los navegadores de escritorio principales, excepto Safari. Por el momento, la versión posterior es compatible con Chrome, Firefox y Opera. La eliminación de esta función tiene como objetivo impulsar la adopción de la propiedad KeyboardEvent.key. Apple aún no sabe si admitirá esta función. Sin embargo, las propiedades KeyboardEvent.keyCode y KeyboardEvent.charCode, que dejaron de estar disponibles (pero aún no se quitaron de Chrome), seguirán estando disponibles en Safari.

Quita el evento finalizado y el atributo de MediaStream, y el atributo activado

Resumen: Se quitan el evento y el atributo ended, así como el controlador de eventos onended, ya que se quitaron de la especificación de las transmisiones y captura de contenido multimedia.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

Ni el evento ended ni el controlador de eventos onended formaron parte de la especificación WebRTC durante aproximadamente tres años. Los desarrolladores que quieran mirar eventos deben usar MediaStreamTracks en lugar de MediaStreams.

SVGSVGElement.viewPort dejó de estar disponible.

La implementación no funciona en Chrome desde 2012. El atributo no está presente en otros navegadores y se quitó de la especificación. Por estos motivos, la propiedad dejará de estar disponible. Se prevé que se quitará en Chrome 55.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

SVGViewElement.viewTarget dejó de estar disponible.

El atributo SVGViewElement.viewTarget no forma parte de la especificación SVG2.0 y su uso es pequeño o inexistente. Este atributo dejó de estar disponible en Chrome 54. Se prevé que se quitarán en Chrome 56.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium

Quitar SVGZoomEvent

SVGZoomEvent no forma parte de la especificación de SVG2.0 y no funciona en Chromium. A pesar de que todavía es detectable, es posible que los desarrolladores confundan. Se quitará.

Intent de quitar | Seguimiento de Chromestatus | Error de Chromium