Summary

  • O primeiro rascunho público da Gamepad API, em 2012, levou botões e eixos dos controles aos jogos no navegador. Imitar teclado ou mouse perdia os movimentos analógicos e exigia software extra.
  • No rascunho W3C de 2025, navigator.getGamepads() retorna uma lista vazia até detectar um gesto real no controle. A regra limita a descoberta passiva de aparelhos; a Permissions Policy e o estado ativo do documento continuam sendo barreiras distintas.

Um controle consegue dizer mais do que “tecla apertada”. O gatilho pode estar só pela metade; o manche pode inclinar pouco para a esquerda. Fazer o aparelho posar de mouse ou teclado é pedir a um pianista que toque de luvas de boxe. O primeiro rascunho público do W3C, de maio de 2012, ofereceu ao script botões, eixos, identificador, índice, marca de tempo e eventos de conexão. Para quem fazia jogos, era finalmente possível perguntar ao controle o que ele estava fazendo.

Os números carregavam a diferença. Um eixo ia de -1 a 1; um botão, de 0 a 1. A pressão parcial continuava parcial. O id ajudava o aplicativo a reconhecer o tipo de dispositivo e o índice distinguia os controles de uma sessão com várias pessoas. Se quatro amigos ocupam o sofá e um pausa a partida, esses detalhes deixam de ser luxo. Também formam uma pequena lista do equipamento do visitante. Uma página que recebe a lista antes de qualquer partida aprende algo sobre a pessoa que talvez nunca tenha pretendido jogar.

É aí que entra a campainha. O rascunho do W3C de 10 de julho de 2025 determina que navigator.getGamepads() devolva uma lista vazia até o navegador observar um gesto feito num controle. O texto aponta a redução do fingerprinting como razão. O hardware pode estar conectado; a página ainda não recebe a apresentação. Quando o jogador aperta um botão ou move deliberadamente uma alavanca que estava em repouso, a conversa começa pela mão certa.

Reconhecer essa mão dá trabalho. Há botões que ficam travados em posição ligada e alavancas que oscilam um pouco sozinhas. Nenhum deles deveria apresentar o visitante a todas as páginas abertas. O rascunho descreve a passagem do estado neutro para o acionado: um botão antes solto é pressionado, ou um eixo antes próximo de sua posição de repouso ultrapassa um limite. O navegador precisa perceber uma ação nova, não confundir uma mola cansada com entusiasmo humano.

Outras condições têm funções próprias. Um documento que não está plenamente ativo recebe uma lista vazia. Se a função gamepad for negada pela Permissions Policy, a chamada gera SecurityError. O gesto não é um cheque em branco para todo quadro incorporado numa página. O navegador decide que documento pode usar a função; o jogo decide o que fazer com cada botão; o jogador decide quando o controle entra na conversa.

Depois da apresentação, o jogo precisa de estados recentes. getGamepads() fornece os controles conectados com os quais houve interação e deixa null nos índices vagos. Eventos avisam quando um controle chega ou sai. Um índice desocupado pode voltar a ser usado; não é o sobrenome de um aparelho. Botões e eixos dizem se alguém quer pular, frear, virar ou navegar por uma interface na televisão. A API entrega o movimento; a aventura ainda pertence ao jogo.

O histórico de publicações do W3C acompanha os rascunhos de 2012 até o texto de 2025. Essas datas marcam documentos, não o dia em que todos os navegadores passaram a agir igual. O arco é mais interessante do que uma tabela de versões: primeiro dar aos jogos o idioma dos controles; depois impedir que qualquer página ouça a apresentação antes do jogador.

Alguém enfim aperta um botão. O personagem se mexe. A página conheceu o controle quando quem o segurava tocou a campainha.