2011-02-16 126 views
2

內合適的高度此錯誤是類似於:火狐不給IFRAME

jQuery reports incorrect element height in Firefox iframe

他回來了不正確的號碼。我的區別是,當我的框架加載 - 它給零。

我想將其內容的高度發送到父窗口。它一直在發送零負載。如果我將間隔設置爲50ms,則會看到數字增加,直到正確的數字。零始終是間隔之前給出的第一個數字。

裏面至少有一個元素具有預定義的高度 - 一些使用css,一些使用內聯。所以如果元素仍在加載,沒有理由應該返回零。

如果我console.log $('#element'),該元素看起來隱藏(在最新版本中淡化)。如果我在Chrome中運行它,它運行完美。我也試過本地的clientHeight也給了0,所以我不認爲它是jQuery。

編輯: 在我嘗試計算高度之前,通過JS添加元素。他們沒有在網頁上開始可能是一個問題..要嘗試做一個簡單的演示頁面發佈。

這不會對火狐4測試版

+0

在iframe中,你試圖訪問在IFRAME中加載的元素而不是iframe本身,對嗎?另外,無論如何,你可以在jsFiddle上覆制這個? – clifgriffin 2011-02-16 19:51:30

+0

是的,iframe中的元素。我現在要演示一個小提琴。 – 2011-02-16 20:03:46

回答

2

在計算時iframe是display: none,因爲我不想在所有內容都設置之前顯示它。所以即使它在技術上是一個不同的窗口,它仍然認爲元素的父元素是不顯示的。

0

發生在沒有看到你的HTML,jQuery的,等等,很難肯定地說。

我會說,我有運氣使用offsetHeight當高度被返回似乎並不準確。你試過這個嗎?

編輯:另一個想法:我注意到在過去的內容完全加載之前通過JavaScript訪問IFRAME可能會有問題。只是要記住。

3

我知道這是一個老問題,但我在Firefox中遇到了類似的問題,其中一個iframe預先加載到Bootstrap模式中,最終顯示時截斷了它。在此之前,我無法計算出正確的高度,但我可以通過一些jQuery合理無縫地(對最終用戶)進行調整。我在這裏回答的情況下,其他人跟着在尋找一個解決類似的問題:

$("#myIframe").load(function() { 
    $m = $(".modal-body"); 
    var mh = $m.height(); 

    var wait = setInterval(function() { 
    var ih = $("#myIframe").contents().find("body").height(); 
    if (ih == mh) { 
     clearInterval(wait); 
    } else if (ih > 0) { 
     clearInterval(wait); 
     $m.animate({ height: ih }); 
    } 
    }, 50); 

    $(".modal").modal("show"); 
}); 

的想法是,當iframe中加載,如果瀏覽器計算其高度爲0,然後我循環,直到其報告的高度發生變化,然後順利地將容器大小設置爲適合的大小。