<body onload=&#34;alert('hello')">window.onload = function(){alert('hello');};

当window.onload事宜触发时,页面上所有的DOM、样式表、脚本、图片、flash都已经加载完成了。

//window.onload不能同时编写多个。
//以下代码无法精确实行,结果只输出第二个。
window.onload = function(){ alert("test1");};window.onload = function(){ alert("test2");};//$(document).ready()能同时编写多个//结果两次都输出$(document).ready(function(){ alert("Hello World"); }); $(document).ready(function(){ alert("Hello again"); });

window.onload和body中onload也有些许差异:

<html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.js"></script> <script language="javascript"> window.onload = haha; function haha(){console.log("window.onload");} if(document.addEventListener){ function DOMContentLoaded(){ console.log("DOMContentLoaded"); } document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); }</script></head><body onload="console.log('bodyonload');"> <div id="div1">a</div></body></html>

在IE10和FireFox下,结果为 :

js插入html页面JavaScript代码嵌入HTML的办法及两者的在履行流程上的细微差别 Angular
(图片来自网络侵删)

"DOMContentLoaded""bodyonload"

解释body中的onload会覆盖window.onload

在chrome下,结果为:

DOMContentLoadedwindow.onloadbodyonload

然后,如果把javascript代码移到最下面,结果又会是什么样呢?

chrome和IE10、FireFox的结果竟然是一样的:

DOMContentLoadedwindow.onload

IE 10、Fire Fox可以理解,window.on load和body中的 on load 谁不才面便是谁覆盖谁,只会实行后面的那个。

4 DOM ContentLoaded嵌入

onload方法可能须要等待韶光,而本方法可以在完成HTML解析后发生的事宜,减少等待韶光。

在chrome、IE10和FireFox中,实行结果是:DOMContentLoaded然后才是onload的输出。
以是说一样平常情形下,DOMContentLoaded事宜要在window.onload之前实行,当DOM树构建完成的时候就会实行DOMContentLoaded事宜。

<html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type="text/javascript" src="jquery2.js"></script> <script language="javascript"> window.onload = haha; function haha(){console.log(document.getElementById("div1"));} if(document.addEventListener){ function DOMContentLoaded(){ console.log("DOMContentLoaded"); } document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); } </script></head><body> <div id="div1">a</div></body></html>

如果你是个jQuery利用者,你可能会常常利用$(document).ready();或者$(function(){}),这都是利用了DOMContentLoaded事宜

5 动态载入JavaScript文件

5.1 利用原生js方法

动态创建script标签,并指定script的src属性

function loadJs(url, callback) { var script = document.createElement('script'); script.type = "text/javascript"; if (typeof(callback) != "undefined") { if (script.readyState) { script.onreadystatechange = function() { if (script.readyState == "loaded" || script.readyState == "complete") { script.onreadystatechange = null; callback(); } } } else { script.onload = function() { callback(); } } } script.src = url; document.body.appendChild(script);}loadJs("test.js", function() { alert('done');});

还可以利用同样的事理动态加载css文件,只不过插入的的父节点是head标签。

5.2 利用document.write/writeln()办法

该种办法可以实现js文件的动态加载,事理便是在重写文档流,这种办法会导致全体页面重绘。

document.writeln("<script src=\"http://lib.sinaapp.com/js/jquery/1.6/jquery.min.js\"></script>");

须要把稳的是分外字符的转义。

5.3 利用jQuery

利用getScript(url,callback)方法实现动态加载js文件

$.getScript('test.js',function(){ alert('done');});

-End-