web-dev-qa-db-ja.com

任意のIEバージョン10以下の場合、AngularJSでXMLHttpRequestアクセスが拒否されました

Microsoft IE 10より前のバージョンのブラウザでアプリケーションを表示しているときに、コンソールで次の奇妙なエラーが表示されます。

console screen shot from the developer console, the view doesn't get resolved due to this error

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にアクセスすることに関連しているようです。

46
Oleg Belousov

Google AngularJSグループの経験豊富なng-devの指導によって達成できた解決策は、この xDomainライブラリ です。

セットアップは非常に簡単です。許可されたOrigin( 'master')の正規表現/文字列と、フロントエンドのスクリプトへの参照を含むproxy.htmlファイルをAPIのルートに配置し、これをポイントします。フロントエンドスクリプト( '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]-->
74
Oleg Belousov

もちろん、あなたの問題はCORSに関連しています。 IE10は実際のXmlHttpRequestを使用しますが、それ以前はIEは使用していませんでした。たとえば、nginxを使用して、サーバーで{}ブロック:

location /api {
   proxy_pass http://my.server.name:12345/v1;
   proxy_redirect off;
}

JQueryでさえXDomainRequestとCORSを完全にサポートしていないことに注意してください。XDRを取得するにはプラグインを追加する必要があります。また、XDRにはCORSに関していくつかの厳しい制限があることに注意してください。

4
aet