我编写了一个函数,该函数不断返回Access-Control-Allow-Origin错误。 这对我来说真的很好;我不想解决这个问题。 我只想捕获它,以便可以在程序中阅读它的消息。
导致引发错误的所有代码都在我的try块内,而catch块则显示该错误的字符串消息。但是,当我运行代码时,未捕获任何错误,并且该错误在控制台中以红色显示。如何捕获此错误并存储其消息?
try {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
if (this.status < 400 && this.status >= 300) {
console.log('this redirects to ' + this.getResponseHeader("Location"));
} else {
console.log('doesn\'t redirect');
}
}
xhr.open('HEAD', $scope.suggLink, true);
xhr.send();
} catch(e) {
console.log('Caught it!');
console.log(e.message);
}
最佳答案
虽然浏览器本身会在控制台上记录更详细的错误消息,但您无法从代码中访问该消息。参见https://bugs.chromium.org/p/chromium/issues/detail?id=118096#c5:
The details of errors of XHRs and Fetch API are not exposed to JavaScript for security reasons.
根据规范在这里实际需要的内容,Fetch规范定义了发生错误时要提供的“状态消息”的详细信息-即使使用XHR API代替Fetch API(XHR规范引用了提取规格)。对于浏览器阻止的任何网络错误或响应,Fetch规范要求状态消息为“空字节序列”:
A network error is a response whose status is always 0, status message is always the empty byte sequence, header list is always empty, body is always null, and trailer is always empty.
因此,您可以从任何可捕获的错误对象中获取的仅仅是“TypeError:无法提取”等。
如果您使用的是XHR,则唯一可以处理错误的方法就是
onerror
事件处理程序:xhr.onerror = function() { console.log("Error occurred but I dunno what exactly.")}
关于javascript - 捕获JavaScript中的Access-Control-Allow-Origin错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55023204/