簡體   English   中英

XMLHttpRequest在任何低於10的IE版本上使用AngularJS拒絕訪問

[英]XMLHttpRequest Access Denied with AngularJS on any IE version below 10

在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有關;

我通過Google AngularJS小組經驗豐富的ng-dev的指導實現的解決方案就是這個xDomain庫

設置非常簡單,只需將proxy.html文件放在API的根目錄下,使用正則表達式/字符串表示允許的原點('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]-->

當然你的問題與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方面存在一些嚴重的限制。

在我的情況下,包含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對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM