在JavaScript中捕获Access-Control-Allow-Origin错误

Rom*_*799 4 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);
        }
Run Code Online (Sandbox Code Playgroud)

sid*_*ker 11

您唯一可以使用的是onerror事件处理程序:

xhr.onerror = function() { console.log("Error occurred but I dunno what exactly.")}
Run Code Online (Sandbox Code Playgroud)

虽然浏览器本身会将更详细的错误消息记录到控制台,但您无法从代码中访问该消息.请参阅https://bugs.chromium.org/p/chromium/issues/detail?id=118096#c5:

出于安全原因,XHR和Fetch API的错误细节不会暴露给JavaScript.

就这里实际需要的规格而言,XHR规范引用了Fetch规范,以便在出现错误时提供"状态消息"的详细信息.对于CORS阻止的任何网络错误或请求,Fetch规范要求状态消息为"空字节序列":

网络错误是其状态始终为0,一个响应状态消息总是空的字节序列,首标列表是总是空的,身体总是零,和拖车总是空的.

  • 可悲的是,尽管这使我能够触发控制台消息,但并不能阻止默认错误消息。换句话说,我要澄清的是,不仅XHR和Fetch API的错误细节没有暴露给JS,而且我们也不能阻止它们显示。超级La子 (2认同)