在firefox中设置父级父级的iframe高度失败

时间:2012-06-13 02:57:40

标签: javascript iframe cross-browser cross-domain parent

背景

这些页面的关系和层次是:

-A.html(domain:domain1.com)

---- B.html(domain:domain2.com)

-------- C.html(domain: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”是不正确的?

1 个答案:

答案 0 :(得分:0)

我看到的问题是你不能在FF中使用document.frames。 另请注意,parentparent.parent以及parent.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);
    }
}