在10以上版本的任何Microsoft IE浏览器上查看我的应用程序时,我在控制台上收到以下奇怪的错误:
我尝试在AngularJS lib之前添加以下JavaScript代码来取消控制台:
console.log = function(){};
window.console = {log: function(){}};
没有什么区别。 IE 10中的相同错误显示为:
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.
可能是我试图从API中获取'/ me'以检查用户是否经过身份验证或访客。
基本上。每次服务器提供2XX或3XX以外的响应时,消除那些恼人的控制台错误都会很棒!
更新:这似乎与访问不同子域(CORS)上的API有关;
答案 0 :(得分:74)
我通过Google AngularJS小组中经验丰富的ng-dev的指导实现的解决方案是xDomain library。
设置非常简单,只需在您的API的根目录下放置一个proxy.html文件,其中包含一个允许来源的正则表达式/字符串(' master'),以及对脚本的引用前端,然后从您的前端脚本(' master')指向此文件。
它的工作原理是在iframe中打开proxy.html文件,并使用postMessage
与CORS资源进行通信。
像$ http和$ resource一样使用魅力。
通过将脚本置于所有JavaScript库包括:
之上,您还可以维护普通浏览器的正常运行<!--[if lte IE 9]>
<script src="xdomain.js" slave="http://example.org/proxy.html"></script>
<![endif]-->
答案 1 :(得分:4)
当然你的问题与CORS有关。 IE10使用真正的XmlHttpRequest,但在此之前,IE没有。到目前为止,我发现解决这些类型问题的最简单方法是使用apache或nginx来代理API。
例如,使用nginx,在您的服务器{}
块中:
location /api {
proxy_pass http://my.server.name:12345/v1;
proxy_redirect off;
}
请注意,即使jQuery不支持XDomainRequest和CORS,您也必须添加一个插件才能获得XDR。另请注意,XDR在CORS方面存在一些严重的限制。
答案 2 :(得分:-1)
在我的情况下,Response Headers
包含
Content-Type:application/json; charset=UTF-8
这是IE9的一个问题,因为它无法在响应中正确处理/解析JSON对象。
将Response Headers
切换为
Content-Type:text/plain; charset=UTF-8
此外,请确保IE9包含以下模块:https://stackoverflow.com/a/28905072/1202371
允许在文本中接收响应,然后将其转换为JSON对象。