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

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

Desativar navegações no gerenciador de descarregamento

Texto longo, leia o resumo:nenhuma navegação de origem cruzada será proibida em manipuladores de eventos window.onunload para trazer o Chrome inline com a especificação HTML, bem como o Firefox e o Safari.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

As versões anteriores do Chrome permitiam que a navegação em origem cruzada fosse interrompida em window.onunload. definindo window.location.href = '#fragment'. De acordo com a especificação HTML, somente navegações na página são permitidas nos gerenciadores de descarregamento e, nas versões anteriores do Chrome, outros métodos de navegação eram bloqueados conforme exigido pela especificação. A partir do Chrome 54, esse tipo de navegação não estará mais alinhado à especificação, assim como no Firefox e no Safari.

HTTP/0.9 descontinuado

Texto longo, leia o resumo: o uso de HTTP/0.9 foi descontinuado. Os desenvolvedores precisam mudar para uma versão posterior, de preferência HTTP/2.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

HTTP/0.9 é o predecessor do HTTP/1.x. Ela não tem muitas características de seus sucessores. Uma preocupação particular 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. Alguns exemplos incluem, entre outros problemas:

  • 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 suspenso que permanece ativo eternamente ou até que o 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 a heurística de cache.

A única maneira infalível de corrigir problemas com o HTTP/0.9 é remover o suporte completamente. É por isso que a compatibilidade com HTTP/0.9 foi removida no Chrome 54.

O uso de initTouchEvent foi removido

Texto longo, leia o resumo: o initTouchEvent foi descontinuado e substituído pelo TouchEvent constructor para melhorar a conformidade com as especificações e será totalmente removido no Chrome 54.

Intenção de remover | Rastreador de status do Chrome | 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 testar ou automatizar algumas interfaces no seu site. Desde o Chrome 49, essa API descontinuada mostra o seguinte aviso:

Aviso de evento de toque
O uso de TouchEvent.initTouchEvent foi descontinuado e será removido na versão M53, por volta de setembro de 2016. Use o construtor TouchEvent. Consulte https://www.chromestatus.com/features/5730982598541312 para saber mais.

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 de initTouchEvent no Chrome não era compatível com a API initTouchEvent do Safari e era diferente do Firefox no Android. 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 precisam de uma alternativa precisam usar o construtor TouchEvent.

Como as implementações da API initTouchEvent em iOS e Android/Chrome eram muito diferentes, os sites muitas vezes tinham códigos na linha de (geralmente esquecendo o 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);

Isso é ruim, porque ele procura "Android" no user agent e no Chrome no Android vão ser correspondentes e vão chegar à descontinuação. Ela ainda não pode ser removida, mas haverá outros navegadores WebKit e mais antigos baseados no Blink no Android por um tempo e você ainda vai precisar oferecer suporte à API mais antiga.

Para processar corretamente TouchEvents na Web, altere seu código para oferecer suporte ao Firefox, ao IE Edge e ao Chrome. Para isso, verifique a existência de TouchEvent no objeto window e, se ele tem um "comprimento" positivo (indicando que é um construtor que usa um argumento), use isso.

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

O atributo KeyboardEvent.keyIdentifier foi removido

Texto longo, leia o resumo:a propriedade keyboardEvent.keyIdentifier com pouco suporte está sendo removida em favor da propriedade KeyboardEvent.key baseada em padrões.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

O atributo keyboardEvent.keyIdentifier fez parte brevemente de uma especificação 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 fizemos na primavera passada. O primeiro tem a base de implementação mais ampla e é compatível com todos os principais navegadores para computador, exceto o Safari. No momento, essa versão é compatível com Chrome, Firefox e Opera. A remoção desse recurso tem como objetivo incentivar a adoção da propriedade KeyboardEvent.key. A Apple não informou se vai oferecer suporte a esse recurso. No entanto, as propriedades KeyboardEvent.keyCode e KeyboardEvent.charCode descontinuadas (mas ainda não removidas do Chrome) ainda estão disponíveis no Safari.

Remoção do evento, atributo e atributo onended do MediaStream

Texto longo, leia o resumo:o evento e o atributo ended e o manipulador de eventos onended estão sendo removidos porque foram removidos da especificação de captura de mídia e streams.

Intenção de remover | Rastreador de status do Chrome | 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 querem assistir eventos precisam usar MediaStreamTracks em vez de MediaStreams.

Suspensão do uso de 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 esses motivos, a propriedade está sendo descontinuada. A remoção está prevista para o Chrome 55.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

O uso de SVGViewElement.viewTarget foi descontinuado.

O atributo SVGViewElement.viewTarget não faz parte da especificação SVG2.0, e o uso dele é pequeno ou inexistente. Esse atributo foi descontinuado no Chrome 54. A remoção está prevista no Chrome 56.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium

Remover SVGZoomEvent

O SVGZoomEvent não faz parte da especificação SVG2.0 e não funciona no Chromium. Apesar de ainda ser detectável, os desenvolvedores podem confundir as coisas. Ele será removido.

Intenção de remover | Rastreador de status do Chrome | Bug do Chromium