Descontinuações e remoções de APIs no Chrome 54

Em quase todas as versões do Chrome, há um número significativo de atualizações e melhorias no produto, no desempenho e também nos recursos da plataforma da Web. Este artigo descreve as descontinuações e remoções no Chrome 54, que está na versão Beta desde 15 de setembro. Essa lista está sujeita a mudanças a qualquer momento.

Desativar navegações no manipulador de descarregamento

Resumo:todas as navegações entre origens serão proibidas nos manipuladores de eventos window.onunload para alinhar o Chrome à especificação HTML, bem como ao Firefox e ao Safari.

Intenção de remoção | Rastreador do Chromestatus | Bug do Chromium

As versões anteriores do Chrome permitiam que a navegação entre origens fosse interrompida em window.onunload. ao definir window.location.href = '#fragment'. De acordo com a especificação HTML, apenas navegações na página são permitidas nos manipuladores de descarregamento. Em versões anteriores do Chrome, outros métodos de navegação eram bloqueados conforme exigido pela especificação. A partir do Chrome 54, essas navegações serão proibidas para que o navegador fique em conformidade com a especificação, assim como o Firefox e o Safari.

HTTP/0.9 descontinuado

TL;DR:o HTTP/0.9 foi descontinuado. Os desenvolvedores precisam migrar para uma versão mais recente, de preferência HTTP/2.

Intenção de remoção | Rastreador do Chromestatus | Bug do Chromium

O HTTP/0.9 é o antecessor do HTTP/1.x. Ele não tem muitos recursos dos sucessores. Uma preocupação específica da Web moderna é a falta de cabeçalhos de resposta. Sem eles, não há como verificar se uma resposta HTTP/0.9 é realmente uma resposta HTTP/0.9. Isso pode causar vários problemas. Por exemplo:

  • Clientes que tratam determinadas respostas de erro como respostas HTTP/0.9 válidas.
  • Servidores que não fecham o soquete de solicitação, fazendo com que os clientes tratem as respostas como um GET pendente que permanece ativo eternamente ou até que um usuário navegue de uma página que fez a solicitação.
  • Servidores que não conseguem indicar ao navegador que uma solicitação falhou, o que pode causar problemas com heurísticas de cache.

A única maneira infalível de corrigir problemas com HTTP/0.9 é remover o suporte por completo. Por isso, o suporte ao HTTP/0.9 foi removido no Chrome 54.

O uso de initTouchEvent é removido

TL;DR: initTouchEvent foi descontinuado em favor do TouchEvent constructor para melhorar a conformidade com a especificação e será removido completamente no Chrome 54.

Intenção de remoção | Rastreador do Chromestatus | Bug do Chromium

Há muito tempo, os desenvolvedores podem criar eventos de toque sintéticos no Chrome usando a API initTouchEvent. Eles são usados com frequência para simular eventos de toque para testes ou automação de algumas interfaces do usuário no seu site. Desde o Chrome 49, essa API descontinuada mostra o seguinte aviso .

Alerta de evento de toque
TouchEvent.initTouchEvent foi descontinuado e será removido no M53, por volta de setembro de 2016. Use o construtor TouchEvent. Consulte https://www.chromestatus.com/features/5730982598541312 para mais detalhes.

Além de não estar na especificação de eventos de toque, há vários motivos para essa mudança ser boa. A implementação do Chrome de initTouchEvent não era compatível com a API initTouchEvent do Safari e era diferente da do Firefox no Android. E, por fim, o construtor TouchEvent é muito mais fácil de usar.

Por esses motivos, decidimos seguir a especificação em vez de manter uma API que não é especificada nem compatível com a única outra implementação. Os desenvolvedores que precisarem de uma alternativa podem usar o construtor TouchEvent.

Como as implementações da API initTouchEvent em iOS e Android/Chrome eram muito diferentes, os sites geralmente tinham código semelhante a (esquecendo o Firefox com frequência)

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

Isso é ruim porque procura "Android" no user agent, e o Chrome no Android vai corresponder e atingir essa descontinuação. No entanto, ele não pode ser removido ainda porque haverá outros navegadores baseados em WebKit e Blink mais antigos no Android por um tempo, e você ainda precisará oferecer suporte à API mais antiga.

Para processar corretamente TouchEvents na Web, mude seu código para compatibilidade com Firefox, IE Edge e Chrome. Para isso, verifique a existência de TouchEvent no objeto window. Se ele tiver um "length" positivo (indicando que é um construtor que recebe um argumento), use-o.

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

Atributo KeyboardEvent.keyIdentifier removido

Resumo:a propriedade keyboardEvent.keyIdentifier, que tem pouco suporte, está sendo removida em favor da propriedade KeyboardEvent.key, baseada em padrões.

Intenção de remoção | Rastreador do Chromestatus | Bug do Chromium

O atributo keyboardEvent.keyIdentifier fez parte brevemente de uma especificação do W3C em 2009 e 2010. No entanto, ele só foi implementado no WebKit.

Os desenvolvedores que precisam substituir esse atributo podem usar a propriedade KeyboardEvent.key baseada em padrões ou a propriedade KeyboardEvent.code, conforme descrito em um artigo que publicamos na primavera passada. O primeiro tem a maior base de implementação, sendo compatível com todos os principais navegadores para computador, exceto o Safari. No momento, o último é compatível com Chrome, Firefox e Opera. A remoção desse recurso tem como objetivo impulsionar a adoção da propriedade KeyboardEvent.key. A Apple não informou se vai oferecer suporte a isso. No entanto, as propriedades KeyboardEvent.keyCode e KeyboardEvent.charCode, que também foram descontinuadas (mas ainda não removidas do Chrome), ainda estão disponíveis no Safari.

Remover o evento e o atributo MediaStream ended e o atributo onended

TL;DR:o evento e o atributo ended e o manipulador de eventos onended estão sendo removidos porque foram removidos da especificação Media Capture and Streams.

Intenção de remoção | Rastreador do Chromestatus | Bug do Chromium

Nem o evento ended nem o manipulador de eventos onended fazem parte da especificação WebRTC há cerca de três anos. Os desenvolvedores que quiserem monitorar eventos precisam usar MediaStreamTracks em vez de MediaStreams.

Descontinuar SVGSVGElement.viewPort

A implementação não funciona no Chrome desde 2012. O atributo não está presente em outros navegadores e foi removido da especificação. Por isso, a propriedade está sendo descontinuada. A remoção está prevista para o Chrome 55.

Intenção de remoção | Rastreador do Chromestatus | Bug do Chromium

Descontinuar SVGViewElement.viewTarget

O atributo SVGViewElement.viewTarget não faz parte da especificação SVG2.0 e é pouco ou nada usado. Esse atributo foi descontinuado no Chrome 54. A remoção está prevista para o Chrome 56.

Intenção de remoção | Rastreador do Chromestatus | Bug do Chromium

Remover SVGZoomEvent

O SVGZoomEvent não faz parte da especificação SVG2.0 e não funciona no Chromium. Apesar disso, o recurso ainda é detectável, o que pode confundir os desenvolvedores. Ele será removido.

Intenção de remoção | Rastreador do Chromestatus | Bug do Chromium