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

body.onload是否等待iframes?

  •  8
  • levik  · 技术社区  · 17 年前

    我知道 onload 事件在触发前等待加载页面资源-图像、样式表等。

    但这是否包括页面内的iframes?换句话说,是否保证所有子帧 重载 S总是比父母的先开火?

    另外,请告诉我浏览器之间的行为是否不同。

    3 回复  |  直到 14 年前
        1
  •  3
  •   Thinker    17 年前

    正如我在页面上看到的,每个i frame都有独立的onload,而top frame onload并不等待i frame启动。

    我的网站上有GIF/PNG横幅,有时加载速度很慢,所以我把它们放到iframe中,这使得整个网站和OnLoad事件工作得更快。

        2
  •  7
  •   cgp    17 年前

    不,不是这样的。如果您想这样做,您需要为iframe添加一个onload处理程序。使用jquery可以很好地做到这一点:

      <iframe src="http://digg.com"></iframe>
      <script>
        var count = $('iframe').length;
        $(function() {
          // alert('loaded'); // will show you when the regular body loads
          $('iframe').load(function() {
            count--;
            if (count == 0)
                alert('all frames loaded');
          });
        });
      </script>
    

    当加载所有帧时,这将发出警报。

    参见示例:

    http://jsbin.com/azilo

        3
  •  5
  •   Stephen Gerard Darragh    14 年前

    或者简单的javascript应该可以工作。

    function checkIframes() {
       if(!i) { i = 0; }
       if(document.getElementsByTagName('iframe')[i]) {
          document.getElementsByTagName('iframe')[i].onload = function () { i++; checkIframes(); }
       }
       else { yourFunctionInHere(); }
    }
    

    还没有真正测试过这个,但是应该可以工作…而不是用 document.onload = function() { checkIframes(); }

    我不太喜欢jquery这样的库,因为到目前为止,我发现用更少的代码和常规的javascript可以实现更多的功能。