我使用基本加载程序在我的页面中按需加载一些js。在一台或两台机器上(我无法访问这些机器)我收到错误,例如"未捕获的SyntaxError:xxx"中的无效或意外的令牌,或者"未捕获的SyntaxError :意外的令牌ILLEGAL"。
当然源文件还可以,这对数千个客户端起作用。当然这必须是一些正在修改我的js文件的防病毒软件,但我想知道发生了什么,看看我是否可以阻止或至少通知客户这个。
我的问题是我正在使用XMLHttpRequest加载脚本,而onload我将文本附加到标题中,例如
ServletContext
在哪里"文件"指向服务器上的文件。问题是,捕获器永远不会执行,因为浏览器似乎很乐意执行上面的代码,然后解析/抛出实际错误。
我想知道是否可以在某种程度上捕获我的加载脚本中的错误,这样我就可以报告浏览器真正收到的内容而不是我的js。
答案 0 :(得分:0)
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加载脚本文件,然后在error
标记和script
对象上收听window
事件;
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);