2011-10-09 79 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