javascript - 捕获JavaScript中的Access-Control-Allow-Origin错误

标签 javascript xmlhttprequest cors

我编写了一个函数,该函数不断返回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/

相关文章:

javascript - 使用 JavaScript 应用 DRY 原则

javascript - 使用输入在 JavaScript 中分类

javascript - 通过 JS 和 API 向 slack 发布消息

xmlhttprequest - AngularJS 和位于不同域上的 Jersey Web 服务之间的通信。无法访问正确的 session

javascript - “CORS 政策已阻止访问获取”Chrome 扩展程序错误

javascript - 无限 ajax 滚动不起作用

javascript - 通过 jQuery 添加内容时 Facebox 不起作用?

javascript - CORS 预检请求的奇怪问题在 IE 11 上失败

ruby-on-rails - 带 rails 的 ionic 中的 CORS 问题

javascript - 如何将 "crossorigin"标记添加到动态加载的脚本中?