错误url对于动态注入的javascript函数是没有用的.需要用户提供参考

Error url is not useful for dynamically injected javascript functions. Need user supplied reference

本文关键字:有用 参考 用户 函数 javascript 于动态 url 注入 动态 错误      更新时间:2023-09-26

javascript是从字符串而不是.js文件引入的,这很难调试,因为错误引用包含错误的脚本文件的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是undefined

例2:使用脚本标签 注入函数

如果不使用eval,而是使用script标记将字符串插入为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页面

我需要一种方法,以便在执行这些动态定义的函数期间发生错误时,向开发人员报告某种信息,指出哪个字符串是错误的来源。我知道我可以使用服务器动态生成大量的源文件,然后设置脚本。src为每个文件,但我想避免引用数百个脚本文件。我更愿意了解如何修改报告的url,或者传递一些可以报告给开发人员的附加信息。

我更喜欢一个跨浏览器的解决方案,但由于这只是为了开发,这是没有必要的。

使用:window报告这些示例中的错误。Onerror = function(message, url, line) {}

这个呢:

function SuperError(msg, location) {
   this.message = msg;
   this.url = location;
}
str = "test_fn = function(){try { undefined_fn(); } catch(e) {throw new SuperError('undefined_fn is undefined', 'in dynamic script head')}}";