Maison  >  Article  >  interface Web  >  Comment vérifier les erreurs de syntaxe javascript

Comment vérifier les erreurs de syntaxe javascript

藏色散人
藏色散人original
2021-07-02 11:40:043179parcourir

Vous pouvez utiliser "window.onerror" en javascript pour vérifier les erreurs de syntaxe et détecter les erreurs d'exécution, avec des codes tels que "window.onerror = function(msg,url,line,col,error){...}".

Comment vérifier les erreurs de syntaxe javascript

L'environnement d'exploitation de cet article : système Windows 7, version JavaScript 1.8.5, ordinateur Dell G3.

Comment vérifier les erreurs de syntaxe javascript ?

Méthode de vérification des erreurs en JavaScript :

  • limitations du try-catch (cette méthode peut être consultée dans Comment javascript gère-t-il les erreurs ?)

ne peut pas être détectée Erreurs de syntaxe (car le code ne s'exécute pas du tout...)

Vous devez utiliser des outils pour ajouter tous les blocs de fonctions et blocs de fichiers pour essayer d'attraper

  • Utiliserwindow.onerror

pour détecter les erreurs de syntaxe et d'exécution erreurs. ;

Vous pouvez obtenir les informations sur l'erreur, la pile, le fichier d'erreur, le numéro de ligne et le numéro de colonne ;

Toute erreur dans le script js exécuté sur la page actuelle sera capturée, telle que : plug-in de navigateur javascript, ou des exceptions lancées par flash, etc.

Les ressources inter-domaines nécessitent une prise en charge spéciale des en-têtes.

Les procédures courantes de gestion des erreurs sont les suivantes :

window.onerror = function(msg,url,line,col,error){
    //没有URL不上报!上报也不知道错误
    if (msg != "Script error." && !url){
        return true;
    }
    //采用异步的方式
    //我遇到过在window.onunload进行ajax的堵塞上报
    //由于客户端强制关闭webview导致这次堵塞上报有Network Error
    //我猜测这里window.onerror的执行流在关闭前是必然执行的
    //而离开文章之后的上报对于业务来说是可丢失的
    //所以我把这里的执行流放到异步事件去执行
    //脚本的异常数降低了10倍
    setTimeout(function(){
        var data = {};
        //不一定所有浏览器都支持col参数
        col = col || (window.event && window.event.errorCharacter) || 0;
        data.url = url;
        data.line = line;
        data.col = col;
        if (!!error && !!error.stack){
            //如果浏览器有堆栈信息
            //直接使用
            data.msg = error.stack.toString();
        }else if (!!arguments.callee){
            //尝试通过callee拿堆栈信息
            var ext = [];
            var f = arguments.callee.caller, c = 3;
            //这里只拿三层堆栈信息
            while (f && (--c>0)) {
               ext.push(f.toString());
               if (f  === f.caller) {
                    break;//如果有环
               }
               f = f.caller;
            }
            ext = ext.join(",");
            data.msg = ext;
        }
        //把data上报到后台!
    },0);
    return true;//返回true是因为不需要在console中打印错误了
};

Apprentissage recommandé : "Javascript Advanced Tutorial"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn