日期:2014-05-17  浏览次数:20717 次

IE6 Script defer 的奇怪表现

when load the following html file in IE6, the result is "<p>javascript code 2</p>". It's strange.
If load in opera, chrome, firefox, It's OK.
 
Anyone knows why?
 
___________________________________________________________________
 
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-5" />
</head>
<body>
<p> para a </p>
<script language="JavaScript">
  document.write('<p>');
  document.write('javascript code 1');
  document.write('</p>');
</script>
<p> para b </p>
<script language="JavaScript" defer>
  document.write('<p>');
  document.write('javascript code 2');
  document.write('</p>');
</script>
<p> para c </p>
<script language="JavaScript">
  document.write('<p>');
  document.write('javascript code 3');
  document.write('</p>');
</script>
</body>
</html>

------解决方案--------------------
有什么奇怪的,defer只有ie支持
相当于window.onload
当页面加载完毕后,执行那段代码。document.write会打开一个新文档,把前一次的文档给清空了


因为其它浏览器不认得defer所以显示正常了
------解决方案--------------------
defer是微软公司自己的属性,其他浏览器忽略了,这个属性的功能是延迟脚本的加载,其他浏览器相对应的属性async:带有async或者defer的script都会立刻下载并不阻塞页面解析,而且都提供一个可选的onload事件处理, 在script下载完成后调用,用于做一些和此script相关的初始化工作.它们的不同之处在于script执行的 时机.带有async的script,一旦下载完成就开始执行(当然是在window的onload之前).这意味着这些script 可能不会按它们出现在页面中的顺序来执行,如果你的脚本互相依赖并和执行顺序相关,就有很大的可能出问题, 例如变量或者函数未定义之类的错误. 而对于带有defer的script,它们会确保按在页面中出现的顺序来执行,它们执行的时机是在页面解析完后,但在 DOMContentLoaded事件之前