javascript - 捕获头脚本中的js解析错误

标签 javascript error-handling

我正在使用一个基本的加载器在我的页面中按需加载一些js。在一台或两台计算机上(我无权访问这些计算机),我收到诸如“Uncaught SyntaxError:xxx 中无效或意外的 token ”或“Uncaught SyntaxError:意外 token 非法”之类的错误。

当然,源文件没问题,并且可以在数千个客户端上运行。可以肯定,这一定是某种防病毒软件正在修改我的 js 文件,但我想知道发生了什么,看看我是否可以阻止或至少通知客户这一点。

我的问题是我正在使用 XMLHttpRequest 加载脚本,并且在加载时我将文本附加到标题中,例如

request.onload = function () {
    var txt = request.responseText + "\n//# sourceURL=" + file + "\n";
    try {
        var script = domDocument.createElement("script"),
        head = domDocument.head || domDocument.getElementsByTagName("head")[0];

        script.defer = true;
        script.text = txt;
        head.appendChild(script);
    } catch (e) {
        domWindow.onerror("Error loading js.", file, 0, 0, e, txt);
    }

    request.onload = function () { };
};

其中“file”指向服务器上的文件。问题是,catch 永远不会执行,因为浏览器似乎很乐​​意执行上面的代码,然后解析/抛出实际的错误。

我想知道是否可以以某种方式捕获加载脚本中的错误,以便我可以报告浏览器真正收到的内容而不是我的 js。

最佳答案

try catch 单独无法捕获在解析时发生的语法错误。据我所知,捕获语法错误的唯一方法是使用 eval

try{
  var txt = request.responseText + "\n//# sourceURL=" + file + "\n";
  eval(txt);
  var script = domDocument.createElement("script"),
  head = domDocument.head || domDocument.getElementsByTagName("head")[0];

  script.defer = true;
  script.text = txt;
  head.appendChild(script);
}catch(er){
  console.log(er);
}

我不推荐这种方法。最好通过 url 加载脚本文件,然后监听 script 标记和 window 对象上的 error 事件;

window.onerror = function(msg, url, lineNo, columnNo, error){
  console.log(msg, url, lineNo, columnNo, error);
}
var script = domDocument.createElement("script"),
  head = domDocument.head || domDocument.getElementsByTagName("head")[0];

script.defer = true;
script.onerror = function(er){
  console.log(er);
};
script.onload = function(){
  console.log('script loaded');
};
script.src = '/path/to/script.js';
head.appendChild(script);

关于javascript - 捕获头脚本中的js解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39019798/

相关文章:

javascript - 使用 firebase 建站

ios - 我在新的xcode更新中有简单的Firebase代码错误

swift - 在发生错误时向用户显示有意义的消息的最常见格式是什么-Swift

error-handling - power bi 报表服务器计划刷新错误

javascript - 从 PHP 脚本调用 Node

javascript - 以编程方式选择输入字段中的部分文本

javascript - 从javascript中的表达式中提取单词或字符?

c++ - clang-format 功能和错误检查在同一行

java - Java Try/Catch语句异常类型

javascript - Jquery 按钮单击事件未触发