46

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

来自开发人员控制台的控制台屏幕截图,由于此错误,视图无法解析

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

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

这并没有什么不同。IE 10 中的相同错误显示为:

SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.

可能我试图从 API 中获取“/me”,以检查用户是否经过身份验证或访客。

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

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

4

3 回答 3

74

在 Google AngularJS 小组中,通过经验丰富的 ng-dev 的指导,我能够实现的解决方案是这个xDomain library

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

它通过在 iframe 中打开 proxy.html 文件并使用postMessage.

与 $http 和 $resource 一起工作就像一个魅力。

您还可以通过将脚本放在所有 JavaScript 库的上方来维护普通浏览器的正常功能,包括:

<!--[if lte IE 9]>
<script src="xdomain.js" slave="http://example.org/proxy.html"></script>
<![endif]-->
于 2013-09-16T09:32:46.310 回答
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 有一些严格的限制。

于 2013-09-09T23:23:44.017 回答
-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 对象。

于 2015-09-03T14:49:30.160 回答