我有一些JavaScript(Jquery Tools'Overlay),当它被丢弃在错误地使用它的页面上时可能抛出异常,我正在尝试优雅地处理它.
我有一个通用的window.onerror处理程序来拯救这些错误并将它们报告回服务器,但是没有被触发.
我也无法在这段代码中包装一个try/catch,因为它被包含在HTML中的远程脚本中.
关于如何挽救外部脚本引发的错误的任何想法?
更新:这是一个例子.我应该纠正自己,window.onerror 会被触发,但是脚本不会继续运行(在示例中,警报从不警告).
<html>
<script type="text/javascript">
window.onerror = function(e){ console.log("caught error: "+e); return true;}
</script>
<body>
<!-- this is the line in the dom that causes the script to throw -->
<a rel="nofollow"></a>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.4.1");</script>
<script src="http://cdn.jquerytools.org/1.2.5/tiny/jquery.tools.min.js"></script>
<script type="text/javascript">
//this code will throw an error in jquery tools
$("a[rel]").overlay();
alert("it's ok, I still ran.");
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(method, uri, async, user, pass) {
this.addEventListener("readystatechange", function(event) {
if(this.readyState == 4){
var self = this;
var response = {
method: method,
uri: uri,
responseText: self.responseText
};
console.log(response);
} else {
console.log(this.readyState);
}
}, false);
open.call(this, method, uri, async, user, pass);
};
Run Code Online (Sandbox Code Playgroud)
我正在尝试在发送 XHR 之前收听它们。同样的事情也给jQuery的beforeSend的$.ajax方法。
我的目标是在发送之前监听所有 XHR。我想最接近的事情是检查上面是否this.readyState === 1?
上面的代码是否会因为我使用原型而导致任何像 jQuery 这样的 ajax 库发生故障XMLHttpRequest?
用什么方式获取js报错产生的ajaxError事件的函数调用者?
我已经用 jQuery 构建了一个 js 错误 repo 应用程序,我可以处理全局发生的正常 js 错误,但是我在 ajax 错误方面遇到了问题。正常错误的时候我可以得到错误的行号!我试图用全局 ajax 处理程序之一“ajax 错误”来捕获它们,但我不确定如何获取该 ajax 调用者或调用者名称的行号。
请看底部!
const error_log_url = '/log';
const errorPost = function (data) {
$.ajax({
url: error_log_url,
type: 'post',
data: data,
success: function (res) {
console.log(res)
}, error: function (res) {
console.log(res)
}
})
}
window.addEventListener('error', function (e) {
let params = {
message: e.message || "Exception Handler",
url: e.filename || "",
lineno: e.lineno || 0,
colno: e.colno || 0
}
errorPost(params)
}, true);
// wrap …Run Code Online (Sandbox Code Playgroud)