2009-12-22 29 views
4

這是一個非常緊迫的問題,我會永遠感激任何能夠借鑑一些見解的人。Document.domain和<iframe> s打破Internet Explorer中的「返回」按鈕

我打算將一個窗口小部件(稱爲「ISM」)部署到第三方站點。該網站使用document.domain JavaScript屬性來緩解跨域限制(例如,將「a.example.com」和「b.example.com」中的document.domain設置爲「example.com」,以便它們可以訪問每個其他的DOM)。

由於我構建的<iframe>用於顯示我的窗口小部件的HTML內容的方式,這會導致Internet Explorer中的腳本出現問題。在Internet Explorer中,在頁面上使用document.domain,然後使用JavaScript創建<iframe>將導致您立即「鎖定」iframe > - 即,您可以創建它,但不會創建它正確的document.domain,所以你不能訪問它的DOM由於安全限制。這在任何其他瀏覽器中都不是問題。

要看看我說的,在IE瀏覽器加載這個頁面:

http://troy.onespot.com/static/3263/stage1.html

你應該看到一個JavaScript錯誤:「訪問被拒絕」。

爲了解決這個問題,我設置了動態創建的<iframe>的「src」屬性,以加載託管在同一個域(不同子域)中的靜態HTML文件,並將其document.domain屬性設置爲適當的值:

http://troy.onespot.com/static/3263/stage2.html

這會激發周圍的安全問題,並讓我寫我本來想寫的<IFRAME>文件:

http://troy.onespot.com/static/3263/stage3.html

使用該文檔時,我的窗口小部件會對我們的服務器進行一些輪詢,以獲取我想要插入另一個<iframe>的一些HTML內容,這將對父頁面的訪問者可見。我粗略地模擬了這裏(使用靜態內容,不實際接觸我們的服務器):

http://troy.onespot.com/static/3263/stage4.html

這裏談到的問題。當我得到該HTML內容並將其插入第二個<iframe>時,我現在遇到了一個不正常的問題,並顯示一個「返回」按鈕。這發生在Firefox 3.0和所有版本的IE瀏覽器(可能還有其他瀏覽器),儘管它在我測試過的一些瀏覽器(Firefox 3.5,Safari,Chrome)中不會發生。看到這個頁面:

http://troy.onespot.com/static/3263/stage5.html

如果點擊「谷歌」的鏈接,一切似乎罰款。但是,當返回到前一頁(具有後一個測試腳本)時,會引入另一個JavaScript錯誤:「權限被拒絕」。這不會終止腳本,並且似乎沒有任何不良影響,除了我認爲它已連接到已斷開的「後退」按鈕功能這一事實,這是一個非常大的問題 - 我正拼命嘗試解決。由於調用堆棧在jQuery腳本中啓動和停止,因此我無法調試此錯誤。

您也可以通過轉到上面的最後一個鏈接(stage5.html - 首先清除您的瀏覽器緩存)來遇到此錯誤 - 更嚴重的症狀。點擊「階段5(再次)」鏈接,然後,在該頁面加載後,點擊「返回」按鈕。

「返回」按鈕已完全損壞!你不能去除另一個URL以外的任何地方。

這是我需要儘快解決的問題。任何見解或幫助將非常感謝

我不能偏離這個方法太多,所以絕對值得歡迎,但由於widget的規範限制,我可能無法使用它們。我更願意理解爲什麼「返回」按鈕被打破以及如何修復它,以及與jQuery相關的「權限被拒絕」錯誤。

+0

http://stackoverflow.com/questions/1796619/how-to-access-the-content-of-an-iframe-with-jquery/1796672#1796672 – 2009-12-23 01:38:54

回答

3

由於存在多個域名,因此很難嘗試修復此問題。我聽說過的一件事是,IE將空白src或「about:blank」視爲不同的域,但將「javascript:」「'視爲同一個域。

iframe.src = 'javascript:""' 

或者:你有沒有不斷變化的階段,一到IFRAME SRC設置爲東西喜歡嘗試

iframe.src = 'javascript:parent.getFrameHTML()' 
+1

除了其他可能的問題,如果你嘗試使用這個解決方案在HTTPS頁面上,您將看到混合內容錯誤。 – EricLaw 2009-12-30 16:28:02

+1

這很有趣,因爲人們經常將frame src設置爲「javascript:void(0)」以避免混合內容警告:http://ajaxian.com/archives/ie-frame-bug – Annie 2009-12-30 18:17:48

1

問題的部分似乎是IE(至少IE 7)增加了兩個條目當我點擊「第5階段再次」鏈接時,將其添加到名爲「域」的歷史記錄中。當您使用「後退」按鈕旁邊的小下拉箭頭時,您會看到頁面的歷史記錄,讓您可以退回多個步驟。我看到前面的兩個條目被列爲「域名」,然後點擊其中的任意一個將我帶到同一頁面。第四個地點(在當前頁面,域名,域名之後)是到原始stage5.html頁面的正確「ISM後退按鈕」鏈接。

所以問題並不在於後退按鈕不起作用,而只是添加了歷史記錄中的條目,因此後退按鈕會將您帶到錯誤的地方。我沒有答案爲什麼這些「域」條目被添加到歷史記錄,但希望這有助於指向一個有用的方向。

祝你好運!