在头文件中捕获js解析错误

时间:2016-08-18 13:42:18

标签: javascript error-handling

我使用基本加载程序在我的页面中按需加载一些js。在一台或两台机器上(我无法访问这些机器)我收到错误,例如"未捕获的SyntaxError:xxx"中的无效或意外的令牌,或者"未捕获的SyntaxError :意外的令牌ILLEGAL"。

当然源文件还可以,这对数千个客户端起作用。当然这必须是一些正在修改我的js文件的防病毒软件,但我想知道发生了什么,看看我是否可以阻止或至少通知客户这个。

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

ServletContext

在哪里"文件"指向服务器上的文件。问题是,捕获器永远不会执行,因为浏览器似乎很乐​​意执行上面的代码,然后解析/抛出实际错误。

我想知道是否可以在某种程度上捕获我的加载脚本中的错误,这样我就可以报告浏览器真正收到的内容而不是我的js。

1 个答案:

答案 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);