AngularJS 在 10 以下的任何 IE 版本上拒绝 XMLHttpRequest 访问 [英] XMLHttpRequest Access Denied with AngularJS on any IE version below 10

查看:29
本文介绍了AngularJS 在 10 以下的任何 IE 版本上拒绝 XMLHttpRequest 访问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在任何版本早于 10 的 Microsoft IE 浏览器上查看我的应用程序时,我在控制台收到以下奇怪的错误:

我尝试通过在 AngularJS 库之前添加以下 JavaScript 代码来取消控制台:

console.log = function(){};window.console = {log: function(){}};

没有任何区别.同样的错误在 IE 10 中显示为:

SCRIPT7002:XMLHttpRequest:网络错误 0x80070005,访问被拒绝.

可能是我试图从 API 获取/me"以检查用户是否已通过身份验证或访客身份.

基本上.每次服务器给出 2XX 或 3XX 以外的响应时,消除那些烦人的控制台错误会很棒!

更新:这似乎与通过不同的子域(CORS)访问 API 相关;

解决方案

在 Google AngularJS 组中一位经验丰富的 ng-dev 的指导下,我能够实现的解决方案是 xDomain 库.

设置非常简单,只需在 API 的根目录下放置一个 proxy.html 文件,使用正则表达式/字符串表示允许的来源('master'),并在前端引用脚本,然后从你的前端脚本('master')指向这个文件.

它的工作原理是在 iframe 中打开 proxy.html 文件,并使用 postMessage 与 CORS 资源通信.

$http 和 $resource 的作用就像一个魅力.

您还可以通过将脚本置于所有 JavaScript 库包含的之上来维持普通浏览器的正常运行: