• 关于javascript脚本中的defer属性的作用


    <script src="../cgi-bin/delscript.js" defer></script>
    中的defer作用是文档加载完毕了再执行脚本,这样回避免找不到对象的问题
    加上 defer 等于在页面完全在入后再执行,相当于 window.onload ,但应用上比 window.onload 更灵活!

    defer是脚本程序强大功能中的一个“无名英雄”。它告诉浏览器Script段包含了无需立即执行的代码,并且,与SRC属性联合使用,它还可以使这些脚本在后台被下载,前台的内容则正常显示给用户。
    --但是 文档加载完毕了再执行脚本

    最后请注意两点:
    1、不要在defer型的脚本程序段中调用document.write命令,因为document.write将产生直接输出效果。
    2、而且,不要在defer型脚本程序段中包括任何立即执行脚本要使用的全局变量或者函数。

    一个常用的优化性能的方法是:当脚本不需要立即运行时,在<SCRIPT>标签中设置“defer”属性。 (立即脚本没有被包含在一个function块中,因此会在加载过程中执行。) 设置“defer”属性后,IE就不必等待该脚本装载和执行完毕。这样页面加载会更快。一般来说,这也表明立即脚本最好放在function块中,并在document或者body对象的onload 句柄中处理该函数。在有一些脚本需要依赖用户操作而执行时----例如点击按钮,或者移动鼠标到某个区域----使用该属性非常有用。但当有一些脚本需要在页面加载过程中或加载完成后执行,使用defer属性得到的好处就不太大。


    代码
    1. <script defer>  
    2. function init(){   
    3. document.getElementById("div").innerHTML="OK";   
    4. }   
    5. init();   
    6. </script>  
    7. <div id="div">如果你能看到这一句,那就是说没有达到我所要的效果   
    8. <img src="http://icon.ajiang.net/icon_0.gif" />  
    9. </div> 


     

    在IE6和FIREFOX2下完全不一样

    IE6中最后执行结果是OK,而firefox中是“如果你能看到这一句,那就是说没有达到我所要的效果”

    我觉得defer这个东西 有推迟执行的意思,IE6里面先解析完所有html代码再执行defer中的脚本

    firefox中 先执行脚本后解析html

    不知道这样的理解是否有误?

    defer的含义并不是这样的。

    在w3c标准中defer的本意只是表示这段脚本不会输出文档内容,所以可以继续解析和呈现。至于执行顺序,完全语焉不详。而且这个属性只是一个hint,没有说必须如此,所以许多浏览器根本不睬这个属性。

    但是在defer属性的创造者ms那里,是有execute顺序的,关于defer的稀奇古怪的行为请看:http://www.websiteoptimization.com/speed/tweak/defer/


    正在制定的html5有极大可能会完善script标签的定义。

    会有两个属性,async和defer。

    其中defer将明确为在整个page的parsing结束之后执行(执行时机差不多就是DOMContentLoad或者IE htc的ondocumentready)。并且会严格按照所有defer的script的顺序执行。

  • 相关阅读:
    HOT: AgentFramework 即将发布
    关于配置 Apache + SVN 1.5 + SSL
    LINQ to SQL(LINQ2SQL) vs. ADO.NET Entity Framework(ADOEF)ccBoy版 阅读笔记
    关于导出属性
    linq to sql 与linq to entities的选择
    linq to sql 算ORM吗?
    匿名方法实现(转)
    Aop中动态横切与静态横切
    老张的灵魂——敏捷回顾
    忙于webmis中
  • 原文地址:https://www.cnblogs.com/jacktu/p/817777.html
Copyright © 2020-2023  润新知