2009-11-03 72 views
5

我已經花了大概一個月的時間在這個問題上研究互聯網,還沒有找到答案。我的代碼執行以下操作(所有Javascript)。Document.Domain madness

比方說,我有mydomain.com

  1. 在頭節的第一件事我設置document.domain的= 'mydomain.com' 一個test.html的;

  2. 然後,動態創建的iframe,SRC設置爲 「subdomain.mydomain.com/test2.html」

  3. 追加iframe來DOM

  4. subdomain.mydomain.com/test2.html:非常頭部的第一件事:document.domain ='mydomain.com';

  5. test2.html有嘗試通過window.parent

適用於所有的瀏覽器與父母溝通on_dom_ready事件。即使在IE6中!唯一的問題是:當我在IE中刷新頁面時,出現拒絕訪問錯誤。

我可以擺脫這個錯誤的唯一方法是在調用window.parent之前等待12秒鐘。甚至連5秒鐘的幫助,我都必須等待12秒鐘。對我來說完全是無稽之談。

任何人都有這方面的經驗?

+0

你有這個問題在IE7和IE8,或只是IE6? – 2009-11-03 18:02:40

+0

IE 7和IE6都沒有在IE8上測試 – Gotys 2009-11-03 18:37:26

+0

通過刷新,你的意思是點擊F5,或點擊url區域並點擊回車?這些觸發了兩種不同的「重新加載樣式」,一種會將緩存命中100%,另一種會檢查服務器上次修改的時間。如果您僅在使用F5進行刷新時看到錯誤,請嘗試通過將光標置於URL窗口並按回車來進行刷新。 – jvenema 2009-11-03 21:04:09

回答

2

這是因爲父框架中的onload事件尚未觸發,所以DOM沒有完全構建。下面是將掃描的間隔一個div,直到它存在一個雜牌,沒有吹起來:

var minmax_SCANDELAY= 500; 
var minmax_scanner; 

function minmax_scan() { 
    if (!window.parent.document.getElementById('content')) return; 
    window.clearInterval(minmax_scanner); 

    //replace following function call with your own. 
    doYourMagicHere(); 
} 

minmax_scan(); 
minmax_scanner= window.setInterval(minmax_scan, minmax_SCANDELAY); 
+0

非常感謝! 這是一種有用的信息。間隔是一個好主意,而不是超時,我不得不將window.parent條件包裝到try/catch語句中,因爲它向我拋出了拒絕權限的錯誤。然而,最大和最奇怪的問題是,window.parent需要真正的10秒才能變爲可用於父框架。我甚至將我的on_dom_ready事件更改爲on_loads,只是爲了確保,沒有幫助。 我想再次強調一下 - 這不是第一次加載頁面的情況..只是刷新後。任何想法? – Gotys 2009-11-03 20:40:17

0

隱祕的回答對我幫助很大!他認爲onload事件確實是問題,他是100%正確的。我看着深入到我的代碼,我發現,創造孩子的iframe之前,我懶加載某些腳本下面的技術:

lazy_load: function(url,on_finish_function) 
{ 
    var head = document.getElementsByTagName("head")[0]; 
    var script = document.createElement("script"); 
    script.src = url; 
    var done = false; 

    var This = this; 
    // Attach handlers for all browsers 
    script.onload = script.onreadystatechange = function() 
    { 
     if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) 
     { 
      done = true; 
      on_finish_function.call(This,null); 
      head.removeChild(script); 
     } 
    }; 
    head.appendChild(script); 
}, 

上述功能修改文檔的HEAD部分。 子iframe從lazy_load函數獲取on_finish。

我的猜測是,IE瀏覽器真的很害怕這個,需要12秒鐘才能恢復文件修改後的震撼:)這個問題我能做些什麼?爲什麼IE需要很長時間才能從lazy_load dom操作中恢復?

+0

head.removeChild(script);在我的onload事件裏面導致了這個問題。 問題解決! – Gotys 2009-11-03 21:35:01

相關問題