2012-08-02 56 views
4

因爲IE不支持異步文件上傳,所以我使用了一種解決方法,即將表單發佈到iframe。我綁定iframe的onLoad事件,並在事件觸發時讀取它的內容。除非服務器返回200以外的狀態碼,否則IE8/IE9會拋出「SCRIPT5:Access is denied」錯誤。看來微軟已經決定,除非請求返回200 OK,否則不應允許任何人閱讀iframe的內容。Internet Explorer:無法訪問IFrame內容,除非狀態代碼爲200

谷歌搜索沒有出現任何東西,所以我在這裏尋求幫助。任何人都可以重現這種奇怪的行爲嗎?反正有這個問題嗎?

iframe不違反任何跨站點安全策略。它們都在同一個域中。

+0

正在返回什麼狀態碼? – Trott 2012-08-02 01:51:13

+0

我試過403,404和500.所有這些都使iframe內容無法訪問(產生前面提到的錯誤信息)。但是,任何2xx或3xx狀態碼似乎都可以。我可以測試更多的狀態碼,但我認爲這種模式很清晰 - 狀態碼(4xx,5xx)表示的任何服務器或客戶端錯誤都會導致此錯誤。 – TomWardrop 2012-08-02 02:07:40

+0

Windows XP上的IE8似乎沒有這個問題。 Windows 7上的IE9和IE9模式下的IE9以及Windows 8上的IE10都支持。 – TomWardrop 2012-08-02 02:34:29

回答

4

我想我在嘗試重現小提琴手上的問題時已經完成了這一項工作。在IE中關閉「顯示友好的HTTP錯誤消息」似乎解決了這個問題。我無法在提琴手上重現它的原因是他們的404頁超過了512字節,因此無論如何它都會顯示nginx錯誤。

基本上,整個問題是,當一個頁面少於512字節(或256在某些情況下),IE似乎取代了整個頁面,阻止訪問該頁面以編程方式的結果。顯然,微軟的監督似乎仍然存在於IE10中。

很容易重現。只需將以下內容放置在服務器下的文件(例如test.html)中,然後返回512字節以下的404響應代碼,並確保您的IE設置爲顯示友好的錯誤消息(還要確保「test1.file」實際上並不實際存在)。在IE打開開發者控制檯的情況下打開頁面,你會看到「訪問被拒絕」的錯誤。如何刷新頁面會改變結果。一個CTRL + F5似乎不會出現問題,但CTRL + R或F5會。

<!DOCTYPE html> 
<html lang="en"> 
<head> 
</head> 
<body> 
<script type="text/javascript"> 
iframe = document.createElement('iframe') 
iframe.src = '/test1.file' 
document.body.appendChild(iframe) 
iframe.contentDocument 
</script> 
</body> 
</html> 

現在,只要我能找到我在哪裏可以提交錯誤報告對IE10,所以我們可以讓我們的生活處理這個可怕的瀏覽器只是一個更好一點。