2013-03-22 34 views
9

我有一個iframe在其上的服務器S1承載我的網頁P1。在運行時,我做iframe.src=加載託管在服務器S2內的iframe中的頁面P2。腳本權限錯誤,即使啓用CORS

我知道關於CORS和服務器S2的頁面P2,我已經設置了Access-Control-Allow-Origin: *,並且我可以在瀏覽器中檢查時確認在響應標頭上的相同。

現在頁面P2及其所有資產都加載了文件,但是當我嘗試使用window.frames["iframe"].document從P1訪問P2的DOM時,它會引發權限錯誤。

即使我在服務器上設置S2 Access-Control-Allow-Origin: *,爲什麼我仍然無法訪問P2的DOM?這是Access-Control-Allow-Origin: *應該工作的方式?

Request-Response

+0

飛行前請求會發生什麼?見https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS – symcbean 2013-03-22 13:55:07

+1

呀將是巨大的,看看請求/響應頭的來源。 – 2013-03-22 14:00:22

+0

那麼,我沒有使用XMLHttpRequest,我不確定是否可以將它與「iframe.src」一起使用。但我可以確認P2的響應頭包含來自S2的「Access-Control-Allow-Origin:*」。 – coreSOLO 2013-03-22 14:03:19

回答

1

您可以使用PostMessages設置文檔之間的通信。即使他們來自不同的領域。

您可以通過PostMessage的發送數據。它是有限的,但是這是更好然後沒什麼

看看http://easyxdm.net/wp/它具有良好的API一起工作。很久以前,我已經提出了跨域http < - > https使用該lib的ajax請求。

+0

謝謝,但不幸的是我需要比「PostMessages」更豐富的控制。我正在尋求完整的DOM操作,並且我認爲「Access-Control-Allow-Origin:*」應該提供給我。 – coreSOLO 2013-03-27 09:15:32

+0

@coreSOLO如果您可以更改iframed頁面代碼,那麼您可以通過'EasyXDM'進行RPC調用並進行所需的任何DOM操作。這並不容易,但你一定可以。 – 2013-03-27 09:26:20

+0

@coreSOLO與'EasyXDM'我能夠從iframe中的所有腳本標記中獲取內容並將其發送到主頁面 – 2013-03-27 09:29:09