使用<script>元素的方式有2种javascript
一、直接在页面嵌入JavaScript代码 <script type="text/javascript"> function sayHi() { alert("Hello!"); } </script> 包含在<script>元素内部的JavaScript代码将被从上至下依次解释,在解释器<script>元素内部全部代码求值完毕之前,页面中的其他内容都不会被浏览器加载或显示 在使用<script>嵌入JavaScript代码时,记住不在要代码中任何地方出现”</script>”字符串,例如,浏览器在加载下面所示代码时就会产生一个错误 <script type="text/javascript"> function sayScript() { alert("</script>"); } </script> 由于浏览器遇到字符串"</script>"时,会认为那是结束的</script>标签,而经过把字符串分割为2部分能够解决这个问题,如: <script type="text/javascript"> function sayScript() { alert("</scr"+"ipt>"); } </script> 二、经过<script>元素包含外部的JavaScript文件 <script type="text/javascript" src="js/login.js"></script> 注:带有src属性的<script>元素不该该在其<script>和</script>标签之间再包含额外的JavaScript代码 另外,经过<script>元素的src属性还能够包含来自外部域的JavaScript文件,这一点既使<script>元素倍显强大,又让它备受争议。<script>与<img>元素很是类似,即它的src属性能够指入当前HTML页面所在的域以外的某个域中的URL,例如 <script type="text/javascript" src="http://www.somewhere.com/afile.js"></script> 这样,位于外部域中的代码也会被加载和解析,就像这些代码位于加载它们的页面中同样。利用这一点能够在必要时经过不一样的域来提供JavaScript文件,不过,在访问本身不能控制的服务器上的JavaScript文件则要多加当心,不然文件中的代码随时有可能被替换 不管如何包含代码,浏览器都会按照<script>元素在页面中出现的前后顺序对它们依次进行解析,在第一个<script>元素包含的代码解析完成后,第二个<script>包含的代码才会被解析…… 标签的位置 习惯放于HTML页面的<head>标签中 但这样作有时会引发如<head></head>中的外部JS文件没解析完,延迟期间浏览器窗口空白,或者是JS在执行中,出现空对象异常(缘由是HTML元素未加载到页面中),所以如今的WEB应用程序通常都把所有的JS引用放在<body>元素中,放在页面内容的后面。 延迟脚本 <script type="text/javascript" src="js/login.js" defer=”defer”></script> Defer这个属性表示脚本会被延迟到整个页面都解析完毕再运行。实际上与上面介绍的把JS放在页面最底部的效果是同样的。 但不是全部浏览器都支持defer属性,所以 建议使用“把JS引用放在<body>元素中,放在页面内容的后面”这个方法 在XHTML中的用法 可扩展超文本标记语言,即XHTML(Extensible HyperText Markup Language),是将HTML做为XML的应用而从新定义的一个标准,编写XHTML代码的规则要比编写HTML严格得多,并且直接影响可否在嵌入JavaScript代码时使用<script />标签。如下面的代码块为例,虽然它们在HTML中是有效的,但在XHTML中则是无效的 <script type="text/javascript"> function compare(a,b) { if(a<b){ alert("a is less than b"); }else if(a>b){ alert("a is greater than b"); }else{ alert("a is equal to b"); } } </script> 这是因为a<b中的小于号在XHTML中被看成一个标签的开始,做为标签来说,小于号后面不能跟空格,所以致使语法错误 解决方法: 一、 用相应的HTML实体(<)替换代码中全部的小于号(<),替换后代码以下 <script type="text/javascript"> function compare(a,b) { if(a < b){ alert("a is less than b"); }else if(a>b){ alert("a is greater than b"); }else{ alert("a is equal to b"); } } </script> 二、 用一个CData片断来包含JavaScript代码,在XHTML(XML)中,CData片断是文档中一个特殊区域,这个区域中能够包含不须要解析的任意格式的文本内容, <script type="text/javascript"> function compare(a,b)<![CDATA[ { if(a<b){ alert("a is less than b"); }else if(a>b){ alert("a is greater than b"); }else{ alert("a is equal to b"); } } ]]> </script> 在兼容XHTML的浏览器中,这个方法能够解决问题,实际上很多浏览器不兼容XHTML,于是不支持CData片断,怎么办呢?再使用JavaScript注释将CData标记注释掉就能够了: <script type="text/javascript"> function compare(a,b) //<![CDATA[ { if(a<b){ alert("a is less than b"); }else if(a>b){ alert("a is greater than b"); }else{ alert("a is equal to b"); } } //]]> </script> 这种格式在全部现代浏览器均可以正常使用,它能经过XHTML验证,并且对XHTML以前的浏览器也会平稳退化 不推荐使用的语法 <script><!-- function sayHi(){ alert("Hello!"); } //--></script> 让不支持<script>元素的浏览器可以隐藏嵌入javascript代码。 因为如今全部浏览器都支持javascript,所以不必再用这种格式了 嵌入代码与外部文件 在HTML嵌入javascript代码虽然没有问题,但通常认为最好的作法仍是尽量使用外中文件,优势以下 可维护性-遍布不一样HTML页面的javascript代码会形成维护问题,但把全部javascript文件都放在一个文件夹中,维护起来就轻松多了,开发人员所以也可以在不触及HTML标记的状况下,集中精力编辑javascript代码 可缓存-浏览器可以根据具体的设置缓存连接的全部外部JS文件,也就是说,若是有2个页面都使用同一JS文件,这个文件只须下载一次,最终结果就是可以加快页面加载的速度 可适应将来-经过外部文件来包含javascript无须使用前面提到的XHTML或注释hack,HTML和XHTML包含外部文件的语法是相同的 2、文档模式 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 最初的2种文档模式是:混杂模式(quirks mode)和标准模式(standards mode),这2种模式主要影响CSS内容的呈现,但在某些状况也会影响JavaScript的解释执行。 若是在HTML文档开始处没有文档类型声明,浏览器会默认开启混杂模式,但采用混杂模式不是值得推荐的作法,由于不一样浏览器的混杂模式行为差别很是大,若是不使用某些hack技术,跨浏览器的一致性就没法实现 3、<noscript>元素 当浏览器不支持JS时,使用<noscript>元素显示替代的内容 <noscript>元素能够包含可以出如今<body>中的任何HTML元素-<script>元素除外 包含在<noscript>元素中的内容只有在 浏览器不支持脚本或 浏览器支持脚本,但脚本被禁用这2种状况下才会显示出来,除此外的其余状况下,浏览器都不会呈现<noscript>中的内容 4、小结 把JavaScript插入到HTML页面中要使用<script>元素,使用这个元素能够把JavaScript嵌入到HTML页面中,让脚本与标记混合在一块儿;也能够包含外部的JavaScript文件,而咱们须要注意的地方有: 一、这2种方式都须要把type属性设置为 text/javascript,以代表使用的脚本语言是JavaScript 二、在包含外部JavaScript文件时,必须将src属性设置为指定相应文件的URL,而这个文件便可以是同一服务器上的文件,也能够是其余任何域中的文件 三、全部<script>元素会按照它们在页面中出现的前后顺序依次被解析,只有在解析完前面<script>元素的代码以后,才会开始解析<script>元素中的代码 四、浏览器在呈现后面的页面内容以前,必须先解析前面的<script>元素中的代码,为此,通常将<script>元素放在页面内容以后和</body>标签以前 五、在IE中,经过defer属性可让浏览器呈现完文档以后再执行脚本,虽然defer属性是HTML4.01规定的,但只有IE支持该属性 六、<noscript>元素能够指定在不支持脚本或禁用脚本的浏览器中显示的替代内容,但在启用了脚本的状况下,浏览器不会显示<noscript>元素中的任何内容