詳細検索

Armadilhas causadas pelo "console" de objetos de depuração em JavaScript

Avatar
por maeno
3 min de leitura

Armadilhas causadas pelo "console" de objetos de depuração em JavaScript
Traduzido do 日本語 • Ver original

[caption id="attachment_267" align="alignleft"]

'console'が宣言されていません(IE8) 'console' não foi declarado (IE8)[/caption]

Quase todos os navegadores modernos têm uma função de validação para depuração, então você pode ver arquivos externos incluídos e estilos adaptados, e pode verificar o funcionamento até mesmo do HTML modificado dinamicamente por JavaScript, jQuery, etc., em tempo real, facilitando muito a criação do site.
Especialmente em JavaScript, com a adição do objeto console, é muito conveniente poder verificar toda a saída de depuração no lado do console do navegador, na parte traseira, agregando todas as saídas de depuração sem interromper o processamento front-end, onde a operação foi verificada enquanto o processamento era interrompido pelo método alert().

Esse objeto de console é bem fácil de usar, pois acho que pessoas que usaram o método alert() no desenvolvimento em JavaScript vão simpatizar com ele. Tudo é processado nos bastidores, então o resultado não aparece, o fluxo do programa não para, e dependendo da implementação do navegador, ele pode listar facilmente o conteúdo de arrays e objetos. Pessoalmente, ele se tornou um objeto essencial para a programação em JavaScript.

No entanto, também existe uma "armadilha" em que é fácil demais de usar, e você publica o site deixando o código de depuração em JavaScript... Existem muitas coisas assim (... só eu? )。
E se sobrar apenas um objeto de console para depuração, o erro ocorrerá em navegadores antigos que não têm um objeto de console (obviamente...).

Em particular, navegadores do IE8 são problemáticos e caem em "armadilhas" ao verificar a operação no IE9 com um objeto de console.
Isso porque o modo desenvolvedor adicionado no IE9 (que começa com [F12]) é conveniente e possui a função de emulação do IE7 e IE8, mas ignora erros para objetos de console que não foram implementados originalmente no IE8. Isso provavelmente ocorre porque o IE9, o navegador original, suporta objetos de console e não alterna internamente durante a emulação, mas como isso é tratado normalmente mesmo que o objeto de depuração permaneça em JavaScript, pode haver casos em que ele seja publicado como "JavaScript que funciona normalmente no IE8" (na verdade, eu fiz).
──Então, após o lançamento, usuários puros do IE8 relatam o erro.
Mas minha função de emulação do IE9 não dá bug... "Hã? Por quê?" É isso mesmo.
Se você me disser o conteúdo do erro puro do IE8 ("O objeto 'console' não está definido"), você perceberá imediatamente, mas os usuários raramente verificam os detalhes do erro, então receberá relatórios fragmentados como "não funciona aqui" ou "recebe um erro aqui". Na verdade, devido à descrição do objeto console, "algumas funções não estão funcionando" descrita abaixo, mas neste caso é difícil identificar a causa e isso é bastante confuso.

Bem, não deixe não só objetos de console, mas também descrições de depuração no código-fonte que os libera! … Essa é a teoria, mas acho que há momentos em que você ousa deixar de lado pensando em cortar depois, ou depurar novamente quando uma função é adicionada.

Nesses casos, é seguro implementá-lo em navegadores que não suportam objetos de console sem erros.
Além disso, faremos dele nossa própria função para não prejudicar a usabilidade do objeto do console e assim ele pode ser chamado a qualquer momento.
[code lang="js"] função debug(string, enable_flag){ if(enable_flag){ if(typeof console!= 'undefined'){ console.info(string); } else{ alert(string); } } retorne true; } [/code] e onde você quer chamar,
[code lang="js"] debug("caracteres que você quer exibir", verdadeiro); [/code] executará o método console.info() se o objeto de console estiver ativado, e o método alert() será executado se o navegador estiver inválido, e o diálogo será exibido. Se você quiser desativar temporariamente a função de depuração, pode especificar "false" no segundo argumento, e nada será feito.

Related Articles