2011-10-09 106 views
2

在我的web項目中,我有一個iframe。它包含一個圖表和一個保存圖表值的表格。 (圖表=谷歌圖API,表數據表=)在iframe重新加載時檢測iframe高度變化

有時由它的js應用iframe中的內容的高度變化,而不是通過重新加載的HTML。

所以我需要檢測那些JS的起源變化和提高I幀的大小。

如何檢測這些更改?

這裏是我的功能,增加I幀的大小。 (僅供參考)

function update_height() {   
      $('#iframe-1').load(function() { 
      var $ifbody = $(this).contents().find('body'); 
      $ifbody.css('height','auto'); 
      $(this).height($ifbody.height()); 
    }); 
    }; 
+0

怎麼樣的setInterval檢查iframe的內容的offsetHeight,並相應地更改烏爾高度//這就是如果我得到ü吧? – Marwan

+0

謝謝我會試試這個,但根據我的項目限制,最好不要連續調查高度變化。 – user884624

+0

如果有一種方法可以趕上調整iframe的內容物和有ü可以韓德爾iframe的高度功能//我不知道這是可能的任何方式// – Marwan

回答

0

頁面中的iframe是內,作爲iframe的SRC必須是來自同一產地(同源策略)提供的頁面。如果是這樣的話,javascript可以從一個頁面到另一個頁面(postMessage或通過HashChange)進行交談,或者直接訪問windows父窗口並調整iframe的大小。

訪問主文檔的IFRAME從iframe中;

function updateHeight(newHeight){ 
    parent.document.getElementById("iframe").style.height=newHeight+"px"; 
} 
+0

感謝您的答覆。是的,他們在同一個域上。但問題是我無法檢測到由iframe js代碼所做的更改。 iframe有一些js代碼,它動態更新其內容。 – user884624

+0

看看在我的文章中添加的JavaScript .. – japrescott

+0

哪個代碼的方式?我現在無法在您的帖子中看到代碼。 – user884624

0

看來你使用jQuery:

$('#iframe-1').load(function(){ 
    $(this).height($(this).contents().find('body').height()); 
}); 

只要這應該做的伎倆爲IFRAME域和協議匹配,初始負載。

然後保持更新的高度變化...

$('#iframe-1').contents().find('body').bind('resize', function(){ 
    $('#iframe-1').height($(this).height()); 
}); 

應該這樣做......可能......

+0

對不起,但他們都沒有爲我工作。 iframe不會在加載時顯示。(因爲你知道我不提供iframe的高度) – user884624

2

既然你不想使用輪詢,也許你應該考慮從iframe js發起一個自定義事件。假設您也使用jQuery在iframe JS,你可以添加這個,只要您的iframe中的內容變化:

parent.$('#iframe-1').trigger("iframeResize", [$("body").height()]); 

然後,在父頁面,設置你的當觸發事件處理程序進行處理:

$('#iframe-1').bind('iframeResize', function(event, newSize) { 
    $(this).height(newSize); 
    //or whatever else you'd like to do, such as call your update_height() function 
}); 

如果您不想發送newSize參數與事件(或您的iframe在事件發生時js不知道),那麼您可以將update_height()代碼放入bind()處理程序中,以獲得大小爲iframe正文。

+0

我試過了,但我似乎沒有綁定和工作。所以我沒有成功與此代碼。不管怎麼說,還是要謝謝你 – user884624