[英]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.