0

背景

此页面的关系和层次结构是:

-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 中有以下函数(带有 id “proxyIframe”的 iframe):

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”不正确?

4

1 回答 1

0

我看到的问题是你不能document.frames在FF中使用。还要注意parentand总是存在的parent.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);
    }
}
于 2012-06-13T03:18:46.717 回答