重学JS(《JavaScript高级程序设计》笔记) - HTML中的JS

HTML中的JavaScript

script元素

由网景公司创造,有如下八个属性:

  • async:可选,表示应该立即下载脚本,但不能阻止其他页面动作,只对外部文件有效。。
  • defer:可选,表示脚本可以延迟到HTML被完全解析后在执行,只对外部文件有效。立即下载,延迟执行。
    关于以上两个属性,有一篇文章讲得很好:浅谈script标签的defer和async

执行顺序:3 - 6 - html渲染 - 7 - 4444 - 5 - 8 - 1 - 2
在这里插入图片描述

  • charset:可选,规定外部脚本文件使用的字符编码,默认为:ISO-8859-1。【很少用】
  • crossorigin:可选,配置相关请求的CORS设置。
  • integrity:可选,允许比对接受到的资源和指定的加密签名以验证子资源完整性。此属性用于确保内容分发网络(CDN)不会提供恶意内容。
  • src:可选,引入脚本路径。
  • type:可选,代替language,表示代码中脚本语言的内容类型(MIME类型)。默认值:“text/javascript”:。如果这个值是module,则会被当成ES6模块。
  • language已废弃,最初用于表示代码块中的脚本语言。

以上标签引出了很多web安全策略解决方案:
integrity可做SRI(防止CND恶意攻击),参考链接:【MDN-SRI
crossorigin可设置不发送客户凭证,参考链接【CORS

其他引入方式:

let script = document.createElement('script');
script.src = 'gibberish.js';
document.head.appendChild(script);

执行这段代码的时候不会发送请求,相当于添加了async。但此处有兼容性问题,建议写成:

let script = document.createElement('script');
script.src = 'gibberish.js';
script.async = false;
document.head.appendChild(script);

由于此种方式获取的资源对浏览器预加载器
不可见,所以会严重影响性能,解决方案为让预加载器知道这些动态请求文件存在,提前声明:

<link rel="preload" href="gibberish.js">

行内代码与外部文件

使用外部文件的理由:

  • 可维护性强
  • 缓存(暂时不做深究,看到缓存后再来补充)
  • 适应未来:假如某一天流行了XXXJS,只需修改引入的type即可
    SPDY/HTTP2?不明白,挂起
    在这里插入图片描述

文档模式

混杂模式(quirks mode)与标准模式(standards mode)
前者让 IE 像 IE5 一样(支持一些非标准的特性),
后者让 IE 具有兼容标准的行为。虽然这两种模式的主要区别只体现在通过 CSS 渲染的内容方面,但对
JavaScript 也有一些关联影响,或称为副作用。
随着发展,又出现了第三种模式准标准模式(almost standards mode)。

混杂模式

混杂模式在所有浏览器中都以省略文档开头的 doctype 声明作为开关。这种约定并不合理,因为
混杂模式在不同浏览器中的差异非常大,不使用黑科技基本上就没有浏览器一致性可言。

标准模式

声明:

<!-- 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> 

准标准模式

这种模式下的浏览器支持很多标准的特性,但是没
有标准规定得那么严格。主要区别在于如何对待图片元素周围的空白(在表格中使用图片时最明显)。准标准模式与标准模式非常接近,很少需要区分。
声明:

<!-- 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"> 

noscript元素

一个优雅降级的处理方案。noscript元素可以包含任何可以出现在body中的HTML元素,script除外。以下情况noscript会出现:

  • 浏览器不支持脚本
  • 浏览器对脚本的支持被关闭

总结:

没啥可总结的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值