XMLHttpRequest在任何低于10的IE版本上使用AngularJS拒绝访问

Ole*_*sov 46 internet-explorer cors angularjs

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

从开发人员控制台拍摄的控制台屏幕,由于此错误,视图无法解析

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

console.log = function(){};
window.console = {log: function(){}};
Run Code Online (Sandbox Code Playgroud)

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

SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ole*_*sov 74

我通过Google AngularJS小组经验丰富的ng-dev的指导实现的解决方案就是这个xDomain库.

设置非常简单,只需将proxy.html文件放在API的根目录下,使用正则表达式/字符串表示允许的原点('master'),并在前端对脚本进行引用,然后指向此来自前端脚本的文件('master').

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

像$ http和$ resource一样魅力.

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

<!--[if lte IE 9]>
<script src="xdomain.js" slave="http://example.org/proxy.html"></script>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)

  • 根据https://github.com/jpillora/xdomain,Xdomain现在提供"与FormData的无缝集成" (3认同)
  • 嘿所有,我想应该澄清,XDomain确实支持跨域发送FormData对象.但是,您的浏览器必须首先支持FormData - 因此这排除了IE8和9. http://caniuse.com/#formdata (2认同)