-
Bug no componente da barra de navegação da BBC
- Recentemente, a equipe resolveu um bug estranho. Apenas um integrante conseguia reproduzi-lo, e isso só acontecia em casa.
-
Causa do bug
- Ao clicar no botão "Mais" do site da BBC, o menu deveria abrir, mas não funcionava em um monitor externo.
- O problema só ocorria no monitor externo, e no Safari não havia problema.
-
Reprodução do problema
- Descobriu-se que o bug só acontecia quando o monitor externo ficava posicionado acima do notebook.
- Foi possível reproduzir o problema ajustando a posição do monitor nas configurações do sistema.
-
Processo de investigação
- Primeira pista: no Safari, o bug não ocorria.
- Segunda pista: só acontecia quando o monitor externo estava acima e à esquerda do monitor principal.
- Terceira pista: no Chrome e no Firefox, os valores de
screenXescreenYeram negativos. - Quarta pista: o bug só ocorria quando
screenXescreenYeram negativos. - Quinta pista: no Chrome e no Firefox, o canto superior esquerdo do monitor principal é a coordenada (0,0).
-
Solução
- A função
isInvokedByMousefoi alterada para verificar sescreenXescreenYnão são 0. - Era um problema complexo, mas a solução foi simples.
- Ainda é necessário refatorar o código, mas a solução atual é suficiente.
- A função
-
Lição aprendida
- É preciso ter cuidado com suposições sobre como as APIs funcionam.
- Apesar de vários testes, o bug não havia sido encontrado.
- Ficou claro que a experiência do usuário pode mudar conforme a configuração dos monitores.
-
Atualização em 2024-11-19: houve confusão sobre o uso de
screenX, e o componente de navegação foi refatorado. Em um próximo post no blog, serão apresentados o processo de refatoração e as respostas às perguntas.
1 comentários
Comentários do Hacker News
Explica por que o site da BBC apresenta comportamentos diferentes ao abrir o menu com teclado e com ponteiro
clické útil por ser independente do dispositivoSugere corrigir
isInvokedByMouseverificando sescreenXescreenYsão diferentes de 0Elogia o investimento da BBC em acessibilidade e a descoberta do bug
Tentou resolver o problema usando templates server-side, framework CSS e o mínimo possível de JS
Aponta que o bug foi causado por uma heurística incorreta
screenXescreenY, valores negativos também devem ser considerados, e não apenas os positivosQuestiona por que o site obtém a posição do mouse por coordenadas de tela
clickpor si só já fornece informação suficientePergunta por que o navegador relata coordenadas diferentes dependendo do monitor
Pergunta qual é a forma correta de distinguir cliques de mouse e cliques de teclado
mousedownekeydownDefende que coordenadas da viewport deveriam ser usadas em vez de coordenadas da tela
Fica impressionado com o fato de o blog ter sido publicado sem aprovação da gerência e do jurídico da BBC