将javascript window.OneError限制为仅在我的脚本中出现错误

将javascript window.OneError限制为仅在我的脚本中出现错误,javascript,jquery,error-handling,Javascript,Jquery,Error Handling,我在服务器端日志中添加了一种记录浏览器中发生的事件的方法: 这会向我的服务器发送一条消息(就像我在正常操作期间使用console.log记录密钥事件一样使用) 这是一个用于捕获其他错误的包装器(基于): 这工作得很好,我在服务器日志文件中获得了我期望的所有事件。但是,问题是我从window.onerror处理程序中得到了一些我不希望出现的错误,如generic“Script error”(我已经看到这可能是一个CORS问题)和其他非常具体的错误,例如 未捕获引用错误:未定义DealPly (这似

我在服务器端日志中添加了一种记录浏览器中发生的事件的方法:

这会向我的服务器发送一条消息(就像我在正常操作期间使用console.log记录密钥事件一样使用)

这是一个用于捕获其他错误的包装器(基于):

这工作得很好,我在服务器日志文件中获得了我期望的所有事件。但是,问题是我从window.onerror处理程序中得到了一些我不希望出现的错误,如generic“Script error”(我已经看到这可能是一个CORS问题)和其他非常具体的错误,例如

未捕获引用错误:未定义DealPly

(这似乎与我的网站无关的浏览器插件有关)


我的站点使用一些外部JS文件,比如JQuery等。有没有办法只记录包含我的日志记录的javascript文件生成的错误,即排除第三方错误?或者这是一件好事?

嗯,我相信URL显示了脚本的名称,因此您可以对照自己的脚本文件进行检查

var mySripts = ["a.js", "b.js"];
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    //or however the url is formatted
    if (myScripts.indexOf(url) > -1) {
         remoteConsoleLog(errorMsg, 'window onerror');
    }
}

我能想到的唯一解决方案是检查
url
是否与您的
js
文件相同,并检查
errorMsg
是否与“脚本错误”不同

大概是这样的:

window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    if(errorMsg.indexOf('Script error.') > -1 || url != "yourfile.js") {
        return;
    }
    remoteConsoleLog(errorMsg, 'window onerror');
}

对于未来的访问者来说,DealPly是一个广告软件,或者说是病毒,如果你喜欢的话。所以问题可能是你的访问者有这个广告软件,而且它使用的脚本有问题。只是一个猜测。

我从哪里获得URL?它可以在您自己发布的事件处理程序中使用(第二个参数)完美!我模拟了一个错误,它与我的脚本名一起被记录(我决定只将url传递给服务器日志,这样我就可以看到服务器端的所有错误)。我将不得不等待现在不会出现一些实际错误。根据下面的回复,我刚刚修改了包装器-remoteConsoleLog(errorMsg,'WindowOnError'+url);-要记录脚本名称并在服务器端进行筛选,您是否找到了导致
DealPly未定义
错误的原因?出于某种原因,我们开始经常看到它。
var mySripts = ["a.js", "b.js"];
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    //or however the url is formatted
    if (myScripts.indexOf(url) > -1) {
         remoteConsoleLog(errorMsg, 'window onerror');
    }
}
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {
    if(errorMsg.indexOf('Script error.') > -1 || url != "yourfile.js") {
        return;
    }
    remoteConsoleLog(errorMsg, 'window onerror');
}