页面初始化:是否需要onload?

时间:2012-02-09 20:33:23

标签: javascript

关于此SO文章和此SO文章。我注意到我的网络应用程序没有在IE8中启动后看了这些...我不关心目前的向后兼容性,但如果它是一行代码,为什么不呢?无论如何,我遇到的另一个问题是onload事件等待加载所有内容...因此如果用户等待图像下载,则用户无法控制。这让我相信我应该使用

<script type='text/javascript'>my_initialize_function()</script>

放在我希望页面初始化的html中。

并告诉

window.onload = initializePage;

window.addEventListener('load',initialize_page);

或任何类似的。

我的问题是:这是初始化一个页面的有效方法吗?

PS:我没有使用包括JQuery在内的任何库......显然我不会尝试初始化尚未加载的元素。

2 个答案:

答案 0 :(得分:1)

您可以使用jQuery$(document).ready()事件。它在DOM完成后但在加载所有图像之前触发。

答案 1 :(得分:1)

没有

jQuery和类似的库有一个有趣的方法。它们只是以交叉浏览器的方式捕获不同的事件,同时使开发人员更容易使用。

让我们考虑以下代码:

<script> document.getElementById('a').innerHTML='b'; </script>
<div id="a"></div>

可能可能无效,具体取决于浏览器在找到时是运行javascript还是仅在整个文档构建完成后运行。

另一方面,如果您使用了正确的事件机制,但文档已经已经,那么您的代码将不会被调用。

jQuery 联合两种范例,以获得无缝且更好的系统。像这样:

var foo = {

  // holds list of callbacks to call when document starts
  stack: [],

  // document not ready yet
  ready: false,

  // add callback to be called when document is ready
  add: function(callback){
      foo.stack.push(callback);
      if(foo.ready)foo.fire(); // document is ready, call fire
  },

  // fire callbacks (document IS ready)
  fire: function(){
      for(var i=0; i<foo.stack.length; i++)
          foo.stack[i]();
      foo.stack = [];

      foo.ready = true; // document IS ready
  }

};

// bind to browser events
window.onload = foo.fire; // TODO: you should use actual events

// example of use
foo.add(function(){
    alert('Document is ready!');
});