JavaScript 在window.onerror中报告“脚本错误”而无跨站脚本编写的情况下
有时,在开发JavaScript应用程序时,您可能会遇到以下问题:即使没有涉及跨站脚本编写(XSS),也会报告“脚本错误”在window.onerror方法中。这可能令人沮丧,因为很难确定错误的原因以及如何修复它。
可能遇到的问题: 以下是此问题可能在您的代码中显现的示例:
Javascript
window.onerror = function (message, source, line, col, error) {
console.log(message); // "Script error."
console.log(source); // "http://localhost:8080/scripts.js"
console.log(line); // 0
console.log(col); // 0
console.log(error); // undefined
};
function foo() {
var bar = 1;
console.log(baz); // ReferenceError: baz is not defined
}
foo();
输出(错误): 当你运行这段代码时,你将在控制台中看到以下输出:
Script error.
http://localhost:8080/scripts.js
0
0
undefined
解决方案: 要解决这个问题,您可以尝试以下方法:
- 检查您的代码是否存在语法错误或未定义的变量,这可能导致错误。如果您正在加载外部脚本,请确保它们托管在与您的主页面相同的域上,以避免任何跨站脚本攻击问题。
- 如果您正在使用内容安全策略(CSP),请确保它允许执行内联脚本或使用eval()。
使用try-catch块来捕获任何错误并为用户提供更有意义的错误消息。
这是一个修改先前代码以捕获错误并提供更有帮助消息的示例:
Javascript
window.onerror = function (message, source, line, col, error) {
console.log(message);
console.log(source);
console.log(line);
console.log(col);
console.log(error);
};
function foo() {
try {
var bar = 1;
console.log(baz); // ReferenceError: baz is not defined
} catch (error) {
console.error("Error: " + error.message);
}
}
foo();
输出: 当你运行这个修改过的代码时,在控制台中会看到以下输出:
Error: baz is not defined
这提供了更有帮助的错误消息,准确地告诉你出了什么问题,更容易修复这个问题。