我正在使用一个基本的加载器在我的页面中按需加载一些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/