2012-06-13 133 views
0

背景

這個頁面的關係和層次結構是:失敗設置父母的父母的iframe的高度在Firefox

-A.html(域名:domain1.com)

---- B中。 HTML(域名:domain2.com)

-------- C.html(域名:domain1.com)

更重要的是,

B.html通過Iframe包含在A.html中(iframe的id是「mainIframe」); C.html通過iframe包含在B.html中(iframe的id是「proxyIframe」);

問題

我有以下功能C.html(iframe的ID爲 「proxyIframe」):

function updateHeight() { 
    mainIframe = parent.parent.document.getElementById('mainIframe'); 
    newHeigh = parent.parent.frames["mainIframe"].frames["proxyIframe"].location.hash.substr(1); 
    mainIframe.style.height = newHeigh; 
} 

function canUpdateHeight() { 
    if(parent!=null && parent.parent!=null && parent.parent.document!=null && 
     parent.parent.document.getElementById('mainIframe')!=null && 
     parent.parent.frames["mainIframe"]!=null && 
     parent.parent.frames["mainIframe"].frames["proxyIframe"]!=null){ 
       window.setInterval("updateHeight()", 200); 
    } 
} 

的問題是:第二個函數內部的檢查將不會被通過,所以第一個功能也不會被觸發。 請注意,這些函數在IE7,Chrome11.x,Chrome16.x,Safari5.x中可用,但在Firefox中有問題。

問題

我想要做的是使上述職能的工作,但目前我不知道現在的問題。使用「parent.parent」是不正確的?

回答

0

我看到的問題是你不能在FF中使用document.frames。 另外請注意,即使沒有框架,parentparent.parentparent.parent.parent.parent.parent.parent總是存在,所以我認爲很多這些條件是不必要的。

嘗試:

function updateHeight() { 
    var mainIframe = parent.parent.document.getElementById('mainIframe'), 
     mainDoc = mainIframe.contentDocument || mainIframe.contentWindow.document, 
     proxyIframe = mainDoc.getElementById('proxyIframe'), 
     proxyDoc = proxyIframe.contentDocument || proxyIframe.contentWindow.document; 
    newHeigh = proxyDoc.location.hash.substr(1); 
    mainIframe.style.height = newHeigh; 
} 

function canUpdateHeight() { 
    if(parent.parent.document.getElementById('mainIframe') 
     && parent.document.getElementById('proxyIframe')) { 
     window.setInterval(updateHeight, 200); 
    } 
} 
+0

嗨wnwall,感謝您快速的解答。事實上,檢查父母的存在是不必要的,因爲它始終存在。對於獲取幀的方法,我沒有區分IE和FF。我會盡快部署更新,我認爲它應該工作,再次感謝!我會通知你,如果它的工作。 – Gary

+0

嗨wnwall,在** parent.document.getElementById('proxyIframe')**,螢火蟲抱怨錯誤:權限被拒絕訪問屬性'文件'** **。我想你知道這個問題,因爲跨域,任何想法? – Gary

+0

啊,對,不同的領域。那麼這是一個不同的問題,並不是一個容易解決的問題,這取決於你對每個域有多少控制。如果你完全控制了兩者,你應該可以在所有瀏覽器上運行,但是準備好將你的袖子捲起來:)。本文看起來像是一個很好的開始:http://www.cakemail.com/the-if​​rame-cross-domain-policy-problem/ –