javascript 高级程序设计 (第四版) 第二章 下


书接上文


1.行内代码与外部文件

虽然可以直接在 HTML 文件中嵌入 JavaScript 代码,但通常认为最佳实践是尽可能将 JavaScript 代
码放在外部文件中。不过这个最佳实践并不是明确的强制性规则。推荐使用外部文件的理由如下。

  1. 可维护性 javascript代码如果分散到很多的页面 会导致维护困难
  2. 缓存 浏览器会根据特定的设置缓存所有外部链接的javascript文件,意味着如果俩个页面都用到同一个文件,则改文件只需要下载一次。最终 意味着页面加载更快。
  3. 适应未来

2.文档模式

IE5.5 发明了文档模式的概念,即可以使用 doctype 切换文档模式
最初的文档模式有俩种 混杂模式和标准模式 后者兼容标准行为
虽然这俩种模式主要区别只体现在通过css渲染的内容方面 但对javascript 也有一些关联影响 称之为副作用

之后 又出现了第三种文档模式 : 准标准模式 主要区别在于如何对待图片元素周围的空白

标准模式通过下列几种文档类型声明开启:

<!-- HTML 4.01 Strict --> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<!-- XHTML 1.0 Strict --> 
<!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<!-- HTML5 --> 
<!DOCTYPE html>

准标准模式通过过渡性文档类型(Transitional)和框架集文档类型(Frameset)来触发

<!-- HTML 4.01 Transitional --> 
<!DOCTYPE HTML PUBLIC 
"-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<!-- HTML 4.01 Frameset --> 
<!DOCTYPE HTML PUBLIC 
"-//W3C//DTD HTML 4.01 Frameset//EN" 
"http://www.w3.org/TR/html4/frameset.dtd"> 
<!-- XHTML 1.0 Transitional --> 
<!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<!-- XHTML 1.0 Frameset --> 
<!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Frameset//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

准标准模式与标准模式非常接近,很少需要区分。人们在说到“标准模式”时,可能指其中任何一
个。而对文档模式的检测(本书后面会讨论)也不会区分它们。本书后面所说的标准模式,指的就是除
混杂模式以外的模式。

3.元素

针对早期浏览器不支持 JavaScript 的问题,需要一个页面优雅降级的处理方案。最终,< noscript>元素出现,被用于给不支持 JavaScript 的浏览器提供替代内容


< noscript>元素可以包含任何可以出现在中的 HTML 元素,< script>除外。在下列两种情况下,浏览器将显示包含在中的内容:

  1. 浏览器不支持脚本
  2. 浏览器对脚本的支持被关闭
    任何一个条件被满足,包含在中的内容就会被渲染。否则,浏览器不会渲染
    中的内容。
<!DOCTYPE html> 
<html> 
 <head> 
 <title>Example HTML Page</title> 
 <script defer="defer" src="example1.js"></script> 
 <script defer="defer" src="example2.js"></script> 
 </head> 
 <body> 
 <noscript> 
 <p>This page requires a JavaScript-enabled browser.</p> 
 </noscript> 
 </body> 
</html>

这个例子是在脚本不可用时让浏览器显示一段话。如果浏览器支持脚本,则用户永远不会看到它。

4.小结

  1. 要包含外部javascript文件 必须将src属性设置为要包含文件的url 文件可以跟网页在同一台服务器上 也可以为与完全不同的域
  2. 所有< script> 元素会依照他们在网页中出现的次序被解释 在不使用defer和asunc 属性的情况下 包含在< script>元素中的代码必须严格按次序解释
  3. 对不推迟执行的脚本 浏览器必须解释完位于< script>元素中的代码 然后才能继续渲染页面的剩余部分,为此 通常应该把< script>元素放到页面末尾 介于主内容之后以及 </ body>之前
  4. 可以使用defer属性把脚本推迟到文档渲染完毕后再执行 。推迟的脚本原则上按照他们列出的次序被执行
  5. 可以使用async 属性表示脚本不需要等待其他脚本,同时也不阻塞文档渲染,即异步加载 。不能保证他们按页面中的出现的次序执行
  6. 通过使用 < noscript> 元素 可以指定浏览器不支持脚本时显示的内容 。如果浏览器支持开启用脚本 则< noscript> 元素中的任何内容都不会被渲染
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值