2014-08-28 63 views
0

我有一个需要rezise它的高度在每次加载时的iframe,我想这样的例子很多,但他们都在IE和Chrome,但在Firefox中没有工作的罚款,直到我试图这样一个它适用于所有的东西的iframe属性的onload多次调用

function autoResize() { 
      var subscriptionFrame = jQuery("#frame_name_here"); 
      var innerDoc = (subscriptionFrame.get(0).contentDocument) ? subscriptionFrame 
        .get(0).contentDocument 
        : subscriptionFrame.get(0).contentWindow.document; 
      if (innerDoc.body.scrollHeight == 0) 
       innerDoc.location.reload(true); 
      subscriptionFrame.height(innerDoc.body.scrollHeight + 10); 
     } 

<iframe src="uploadFile.xhtml" class="upload-iframe" 
      id="frame_name_here" onload="autoResize();"></iframe> 

但是有一个问题,这个脚本多次调用onload(递归),任何想法为什么?

+0

由于改变高度触发负载 – Jacob 2014-08-28 09:30:44

+0

是它因为这样:'innerDoc.location.reload(真);'? – Pete 2014-08-28 09:31:14

+0

我想我找到了问题'如果(innerDoc.body.scrollHeight == 0) innerDoc.location.reload(真);'这部分使得它重新加载,但iframe的高度为0,直到一定的作用,但这个递归电话打电话给服务器任何想法如何阻止此? – 2014-08-28 09:38:25

回答

0

我找到了答案,iframe部分显示为none,并不意味着它不在Dom树中,这就是递归部分发生的原因,因为iframe在这种情况下没有得到任何高度,直到iframe被显示,并且高度的内容被resize函数读取。所以为了解决这个问题,而不是display:none,我做了iframe部分在dom树中不呈现,直到某些动作,所以通过这个动作resize方法只会读取一次内容。