加载之前隐藏的iframe的Javascript问题

前端之家收集整理的这篇文章主要介绍了加载之前隐藏的iframe的Javascript问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个页面包含使用 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,这是我绝对希望避免的事情.

解决方法

有些浏览器假定当对替换的元素(如Flash或者iframe)应用“display:none”时,不再需要该元素的视觉信息.因此,如果元素稍后由CSS显示,浏览器将实际上重新创建可视化数据.

我想像iframe默认为“display:none;”使浏览器跳过HTML的呈现,因此标签没有任何尺寸.我会将可见性设置为“隐藏”,或将其置于页面之外,而不是使用“display:none;”.

祝你好运.

猜你在找的HTML相关文章