2008-09-30 88 views
23

對於在帶有多個參數的表單中發佈AJAX表單,我正在使用創建iframe的解決方案,通過POST將表單發佈到該表單,然後訪問iframe的內容。 具體而言,我訪問這樣的內容:訪問iframe文檔對象時出現「訪問被拒絕」錯誤

$("some_iframe_id").get(0).contentWindow.document 

我測試了它和它的工作。

在某些頁面上,我開始出現「Access is denied」錯誤。據我所知,如果iframe是從同一個域提供的,就不會發生這種情況。

我很確定它以前工作。任何人都有線索?

如果我不夠清楚:我發佈到相同的域。所以這不是一個跨域請求。我只在IE上測試。

P.S.我不能使用簡單的ajax POST查詢(不要問...)

回答

48

自己解決!

問題是,即使發送了正確的響應(用Fiddler驗證),它也是使用HTTP 500錯誤代碼(而不是200)發送的。

因此,事實證明,如果響應是使用錯誤代碼發送的,則IE將用從磁盤加載的錯誤消息(res://ieframe.dll/http_500.htm)替換iframe的內容,並導致跨域訪問被拒絕錯誤。

+0

我使用fileupload.js上傳文件(它使用iframe)。看起來像我有同樣的問題,但我不知道什麼可能會導致此。看起來只是超時問題。你是怎麼阻止的? – 2010-02-23 15:45:09

+0

我不確定我是否理解這個問題。無論如何,如果你認爲它與我的解決方案有關,你應該看看上傳的響應返回的HTTP代碼。 – Ovesh 2010-03-10 08:27:15

-1

基本上,當框架中的文檔和ii以外的文檔具有不同的域時,會發生此錯誤。所以爲了防止跨腳本的瀏覽器禁用這種執行。

+2

我發佈到相同的域。 – Ovesh 2008-09-30 01:11:33

-1

,如果它是一個域的問題(或子域),如www.foo.com發送的每一頁上www.api.foo.com

的請求可以設置

document.domain = www.foo.com 

允許「跨域」權限

5

跨域錯誤,當涉及到的iFrame:

  1. 開放的iFrame與不同的URL(例如開放www.foo.com)從父母頁面(www.ooof。COM)

  2. 不同的端口(開口的iframe網址爲:從原始端口)不同

  3. 不同的協議:從作爲HTTP

檢查父頁開口的iFrame與HTTPS URL那些如果你遇到這個問題。

2

我的問題是X-Frame-Options HTTP標頭。我的Apache配置已將它設置爲:

Header always append X-Frame-Options DENY 

刪除它允許它工作。具體來說,在我來說,我是用IFRAME運輸的jQuery與jQuery的文件上傳插件上傳IE 9和IE 10

1

說明文件,如果你有src='javascript:void(0)'然後一個iframe中的JavaScript像frame.document.location =...將失敗,並在訪問被拒絕錯誤IE瀏覽器。正在使用與目標框架交互的JavaScript庫。即使它試圖改變框架的位置與父代位於同一個域中,但iframe最初設置爲javascript:void,從而觸發了跨域訪問被拒絕的錯誤。

爲了解決這個問題,我在我的網站上創建了一個blank.html頁面,如果我需要事先聲明一個iframe,直到通過javascript更改,然後我將它指向空白頁以便src='/content/blank.html'處於同一個域名。

或者,您可以完全通過JavaScript創建iframe,以便您可以在創建時設置src,但在我的情況下,我使用的庫需要已在頁面上聲明的iframe。