我有一个页面包含使用
Javascript加载的iframe
的index.html
<iframe id="myFrame" width="800" height="600" style="display: none;"></iframe> <div id="loader"><!-- some loading indicator --></div> <script type="text/javascript"> function someFunction() { var myFrame = document.getElementById('myFrame'); var loader = document.getElementById('loader'); loader.style.display = 'block'; myFrame.src = 'myFrame.html'; myFrame.onload = function() { myFrame.style.display = 'block'; loader.style.display = 'none'; }; } </script>
在iframe中加载的页面包含一些JavaScript逻辑,它计算某些元素的大小,以添加JS驱动的滚动条(jScrollPane jQuery Dimensions).
myFrame.html
<div id="scrollingElement" style="overflow: auto;"> <div id="several"></div> <div id="child"></div> <div id="elements"></div> </div> <script type="text/javascript"> $(document).load(function() { $('#scrollingElement').jScrollPane(); }); </script>
这在Chrome(可能还有其他Webkit浏览器)中起作用,但在Firefox和IE中失败,因为在jScrollPane被调用的时候,所有元素仍然是无效的,并且jQuery Dimensions无法确定任何元素的维度.
有没有办法确保我的iframe在$(document).ready(…)被调用之前可见?除了使用setTimeout来延迟jScrollPane,这是我绝对希望避免的事情.
解决方法
@H_403_19@ 有些浏览器假定当对替换的元素(如Flash或者iframe)应用“display:none”时,不再需要该元素的视觉信息.因此,如果元素稍后由CSS显示,浏览器将实际上重新创建可视化数据.我想像iframe默认为“display:none;”使浏览器跳过HTML的呈现,因此标签没有任何尺寸.我会将可见性设置为“隐藏”,或将其置于页面之外,而不是使用“display:none;”.
祝你好运.