从字符串而不是 .js 文件引入的 javascript 很难调试,因为错误引用了包含错误的脚本文件的 url。如果引入了很多字符串,则很难判断哪个字符串(脚本)是错误的来源。
我有大量的对象。每个对象都有一个字符串,它将动态定义其 javascript 函数。一旦定义了函数,我需要一种方法来处理在执行这些动态定义的函数期间发生的错误,以报告某种信息,指示哪个字符串/对象是错误的来源。
示例 1:使用 eval() 注入函数
如果您使用 eval() 将字符串作为 javascript 插入,则错误 url 未定义。
str = "test_fn = function(){undefined_fn();}";
eval(str);
test_fn();
将产生以下错误:
message: "ReferenceError: Can't find variable: undefined_fn"
url: undefined
line: 1
所以在这种情况下,错误 url 是未定义的。
示例 2:使用脚本标签注入函数
如果您使用脚本标签代替 eval 将字符串作为 javascript 插入,则错误 url 引用 html 文件。
str = "test_fn = function(){undefined_fn();}";
if(!document.head) document.head = document.getElementsByTagName('head')[0];
var elem = document.createElement('script');
elem.text = str;
document.head.appendChild(elem);
test_fn();
将产生以下错误:
message: "ReferenceError: Can't find variable: undefined_fn"
url: "testpage.html"
line: 1
所以在这种情况下,错误 url 是 html 页面。
我需要一种方法来处理在执行这些动态定义的函数期间发生的错误,以便向开发人员报告某种信息,指示哪个字符串是错误的来源。我知道我可以使用服务器动态生成大量源文件,然后为每个文件设置 script.src,但是我想避免引用数百个脚本文件。我宁愿了解如何修改报告的 url,或者传递一些可以报告给开发人员的附加信息。
我更喜欢跨浏览器解决方案,但由于这仅用于开发,因此没有必要。
这些示例中的错误是使用以下方法报告的:window.onerror = function(message, url, line) {}