代码之家  ›  专栏  ›  技术社区  ›  Aistina

加载前隐藏的iframe的Javascript问题

  •  13
  • Aistina  · 技术社区  · 16 年前

    我有一个包含 iframe 使用Javascript加载的:

    索引.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>
    

    在中加载的页 包含一些Javascript逻辑,用于计算某些元素的大小,以便添加JS驱动的滚动条(jScrollPane+jquerydimensions)。

    我的框架.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维度无法确定任何元素的维度。

    是可见的 之前 $(document).ready(...) setTimeout 拖延 ,这是我绝对想避免的。

    4 回复  |  直到 16 年前
        1
  •  14
  •   Steven P.    16 年前

    我认为iframe默认为“display:none;" 使浏览器跳过HTML的呈现,因此标记没有任何维度。我会将可见性设置为“hidden”,或者将其放置在页面之外,而不是使用“display:none;".

        2
  •  8
  •   Codester oezi    8 年前

    而不是使用 display:none ,你可以试着。。。

    ... 设置 visibility:hidden

    position:absolute; top:-600px;

    ... 设置 opacity:0

    或者其他一些让jQuery“看到”对象而不是用户的东西(并重置您的应用程序中使用的css属性) myFrame.onload 函数)。

        3
  •  0
  •   Ash    12 年前

    visibility:collapse; display:hidden; height:0px;

    iframe还将加载。。

        4
  •  -4
  •   GolfARama    14 年前

    隐藏的iframe是一个巨大的安全问题。如果合法的话,最好尝试另一种方法来实现你想要的,因为希望未来的浏览器能完全摆脱这个特性。 http://blog.opendns.com/2012/07/10/opendns-security-team-blackhole-exploit/