我在网页上嵌入了一些JavaScript代码。尽管进行了跨浏览器测试以确保JavaScript在不同操作系统和Web浏览器的矩阵上运行,但JavaScript在执行期间仍可能失败。
有没有办法确定某些JavaScript何时失败,然后记录该事件,以及一些会话环境,它会提供有关发生的事情的一些信息?我知道JavaScript <noscript>
标记和HTML5中的no-js
样式,但我更关心JavaScript何时尝试运行但遇到问题。
基本上,我想知道我的JavaScript代码何时无法执行,因此我可以了解更多有关发生的事情并主动解决问题。商业解决方案是可以接受的。
到目前为止,我找到的最接近的解决方案是Jamey Sharp's method to set a global variable in JavaScript, then check the value of that variable in a later JavaScript。
答案 0 :(得分:6)
将所有代码包装在
中try {
[code]
} catch (e) {
[handle error]
}
这可以很简单:
function error_wrap(callback) {
try { callback(); } catch (e) {
// do ajax to report error
}
}
error_wrap(function () {
// my code
});
困难的部分是事件。每当发生事件时,都不会捕获错误。
error_wrap(function () {
setTimeout(function () {
throw new Error("nope"); // this error will not be caught
}, 1);
});
确保您还包装所有事件处理程序(以及setTimeout
和setInterval
)。
它可以看起来像setTimeout
:
function wrappedSetTimeout(callback, ms) {
return setTimeout(function () { // wrap the function again because we don't want to execute it yet
error_wrap(callback);
}, ms);
}
答案 1 :(得分:0)
Mozilla开发者网络的示例:
try {
throw "myException"; // generates an exception
}
catch (e) {
// statements to handle any exceptions
logMyErrors(e); // pass exception object to error handler
}
如果你想记录,那么你必须进行一次AJAX调用,将错误和上下文发送到后端并在那里使用你通常的记录机制。