Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript iframe包装在隐藏元素中,滚动高度不正确_Javascript_Html_Iframe - Fatal编程技术网

Javascript iframe包装在隐藏元素中,滚动高度不正确

Javascript iframe包装在隐藏元素中,滚动高度不正确,javascript,html,iframe,Javascript,Html,Iframe,很抱歉,我不能发布实际的代码或实际的工作示例。这个问题需要一个iframe,所以我不能简单地将一个fiddle放在一起,并且部署它的服务器无法从网络访问。希望我将要发布的这些片段足以复制 我有一个页面需要在iframe中显示另一个页面,我对此没有控制权,iframe的大小应该根据其内容页面的高度来确定,该高度随着用户以各种方式与iframe交互而变化;但是,调整大小总是由于隐藏/显示元素,如果这有任何区别的话 这种调整大小的行为在所有浏览器中都可以正常工作,但iframe包装最初隐藏时除外。在这

很抱歉,我不能发布实际的代码或实际的工作示例。这个问题需要一个iframe,所以我不能简单地将一个fiddle放在一起,并且部署它的服务器无法从网络访问。希望我将要发布的这些片段足以复制

我有一个页面需要在iframe中显示另一个页面,我对此没有控制权,iframe的大小应该根据其内容页面的高度来确定,该高度随着用户以各种方式与iframe交互而变化;但是,调整大小总是由于隐藏/显示元素,如果这有任何区别的话

这种调整大小的行为在所有浏览器中都可以正常工作,但iframe包装最初隐藏时除外。在这种情况下,如果iframe页面元素在Chrome中都是可见的,那么iframe的大小将与目标页面的大小相同,而在FF中则是不可见的0高度

控制台中没有JS错误,两个页面都可以通过设置document.domain的其他方式访问彼此。这个页面是XHTML的过渡版,但是如果有什么不同,我应该能够改变它

iframe HTML:

<div id="frame-wrapper" style="display: none">
    <iframe src="some_page_that_shrinks_after_dom_load.html" frameborder="0" scrolling="no" onload="javascript:frameLoaded(this);"></iframe>
</div>

正如你所看到的,我已经知道如何解决这个问题了。我真正想要的是解释一下这里发生了什么。

您是否尝试过运行setTimeoutresizeIframe,100;?当然,您需要在frameLoaded中保存对iframe的引用。@JaredFarrish您能详细说明这与正在发生的事情有什么关系吗?我不需要解决方案,我有一个解决方案,我想解释为什么需要我的解决方案。@JaredFarrish不管怎样,setTimeout也不起作用:/
function frameLoaded(iframe) {
    function resizeIframe() {
        iframe.style.height = iframe.contentWindow.document.documentElement.scrollHeight + 'px';
        alert(iframe.style.height);
    }

    // ...
    // set up some callbacks in the iframe to resizeIframe() which do work and give correct size, probably because the wrapper is unhidden
    // ...

    // this call for the size at the time of load is what is broken iff "frame-wrapper" is display: none
    resizeIframe();
    // the hack im using to avoid this:
    $('#frame-wrapper').show();
    resizeIframe();
    $('#frame-wrapper').hide();
}