2011-04-26 80 views
44
var xhttp=new XMLHttpRequest(); 
xhttp.open('GET', 'foo.xml', false); 

F12彈回到:SCRIPT5:訪問被拒絕。 95行,這是xhttp.open行。SCRIPT5:訪問IE9被拒絕上的XMLHttpRequest

我的JavaScript似乎早有形成,和Firefox做什麼,我認爲它應該。

我讀了很多的問題非常相似,這一個,所以我已經簽出同源策略,但我看不出它會如何運用考慮foo.xml是在同一個目錄中該html文件。我打開了本地Intranet的腳本權限,並告訴邁克菲需要休息五分鐘才能確定。我甚至試圖以管理員身份運行IE,所以這不可能是一個權限問題嗎?爲什麼IE會被拒絕訪問本地文件?

回答

0

我認爲問題在於該文件位於本地計算機上,並且IE拒絕訪問,因爲如果它允許腳本訪問瀏覽器正在運行的文件,那將是一個巨大的安全漏洞。
如果你有機會到服務器或者,你可以爲一個使用,也許你可以嘗試把這些文件上的那個,然後運行腳本,你會從一個網站的另一個可比。

+0

奇怪的是,如果這是真的,IE瀏覽器有一個大的安全漏洞 - 我發現我可以加載並通過聲明一個XML數據島操縱這個文件並使用datafld內聯。不是我喜歡這個想法,但這是我現在最好的。 – 2011-04-27 04:12:15

0

也許你所要求的,外部資源,這種情況下,IE需要XDomain對象。請參見下面的代碼示例如何使Ajax請求與交叉域的所有瀏覽器:

Tork.post = function (url,data,callBack,callBackParameter){ 
    if (url.indexOf("?")>0){ 
     data = url.substring(url.indexOf("?")+1)+"&"+ data; 
     url = url.substring(0,url.indexOf("?")); 
    } 
    data += "&randomNumberG=" + Math.random() + (Tork.debug?"&debug=1":""); 
    var xmlhttp; 
    if (window.XDomainRequest) 
    { 
     xmlhttp=new XDomainRequest(); 
     xmlhttp.onload = function(){callBack(xmlhttp.responseText)}; 
    } 
    else if (window.XMLHttpRequest) 
     xmlhttp=new XMLHttpRequest(); 
    else 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
      Tork.msg("Response:"+xmlhttp.responseText); 
      callBack(xmlhttp.responseText,callBackParameter); 
      Tork.showLoadingScreen(false); 
     } 
    } 
    xmlhttp.open("POST",Tork.baseURL+url,true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send(data); 
} 
1

在IE7,IE8,IE9和剛進入設置 - > Internet選項 - >安全 - >自定義級別,改變安全「雜項」下的設置將「跨數據源訪問數據源」設置爲啓用。

+51

-1因爲你不能影響用戶的設置 – Skurpi 2013-02-04 12:37:08

+4

@Skurpi同意,那麼這就是使用IE的價格。通過我們的應用程序,我們聲明只支持Firefox和Chrome。如果我們的客戶想要使用IE,那麼他們需要確保啓用此設置,我們的IE客戶端更改了他們的設置。 – 2013-02-08 16:32:26

+0

當試圖從小書籤運行XMLHTTPRequest時,我不斷收到此訪問被拒絕的錯誤。當我在頁面上運行腳本時,它運行良好。這是唯一可行的解​​決方案。 Win 7 IE 9. – thefoyer 2013-02-12 17:18:06

4

這個例子說明如何使用AJAX可以從任何網站拉resourcess。它適用於各種瀏覽器。我已經在IE8-IE10,safari,chrome,firefox,opera上測試過它。

if (window.XDomainRequest) xmlhttp = new XDomainRequest(); 
else if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest(); 
else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 

xmlhttp.open("GET", "http://api.hostip.info/get_html.php", false); 
xmlhttp.send(); 

hostipInfo = xmlhttp.responseText.split("\n"); 
var IP = false; 
for (i = 0; hostipInfo.length >= i; i++) { 
    if (hostipInfo[i]) { 

     ipAddress = hostipInfo[i].split(":"); 
     if (ipAddress[0] == "IP") { 
      IP = ipAddress[1]; 
     } 
    } 
} 
return IP; 
+5

不適用於HTTPS – 2013-12-26 19:31:55

2

此錯誤消息(SCRIPT5:訪問被拒絕),如果沒有找到.replace方法的目標頁面,也可以遇到(我已經進入了網頁的名稱不正確)。我知道,因爲它發生在我身上,這就是爲什麼我去尋找關於錯誤信息含義的更多信息。

+1

「替換方法」是什麼意思?我有這個錯誤消息,但我無法弄清楚是什麼導致了它。 – 2013-05-21 16:48:58

0

我曾在IE10面臨着類似的問題。我有一種變通方法,通過使用jQuery的Ajax請求檢索數據:

$.ajax({ 
    url: YOUR_XML_FILE 
    aync: false, 
    success: function (data) { 
     // Store data into a variable 
    }, 
    dataType: YOUR_DATA_TYPE, 
    complete: ON_COMPLETE_FUNCTION_CALL 
}); 
-3

打開Internet Explorer開發工具, 工具 - > F12開發人員工具。 (我想你也可以按F12 得到它)

更改文檔模式標準。 (如果更改文檔模式,頁面應自動刷新)

問題應該修復。 享受

-1
$.ajax({ 
     url: '//freegeoip.net/json/', 
     type: 'POST', 
     dataType: 'jsonp', 
     success: function(location) { 
      alert(location.ip); 
     } 
    }); 

此代碼將工作https網站也