JavaScript高级程序设计第四版--第二章--HTML中的JavaScript

<script>元素

这个元素是由网景公司创造出来,并最早在Netscape Navigator2中实现的。后来这个元素被正式加入到HTML规范

属性

async

可选、只对外部脚本有效

立即开始下载脚本,但不能阻止其它页面动作,比如下载资源或等待其它脚本加载

charset

可选、只对外部脚本有效

指定src代码的字符集,很少使用因为大部分浏览器不在乎它的值

crossorigin

可选、在跨域时是否携带凭据

anonymous:不携带凭据(默认)

use-credentials:携带凭据

凭据:cookie、TLS/SSL证书、HTTP Authentications(HTTP认证)

defer

可选、外部脚本有效、IE7及更早行内脚本有效

在文档解析何显示完成后再执行脚本

integrity

可选

允许对比接收到的资源和指定的加密签名以验证子资源的完整性(SRI,Subresource Intergrity)。如果接收到的资源的签名和这个属性指定的签名不匹配,则页面会报错,脚本不会执行。可以确保内容分发网络(CDN)不会提供恶意内容

language

弃用

最初用于表示代码块中的脚本语言类型版本

src

可选

要执行的外部文件

type

可选

用于代替language,表示代码块中脚本语言的内容类型(

[MIME类型] MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式

惯例:按照惯例这个值都是“text/javascript”,尽管“text/javascript”和“text/ecmascript”都已经弃用

通常:JavaScript文件的MIME类型是“application/x-javascript”,不过给这个值有可能导致脚本被忽略

module:代码会被当成SE6模块,而且只有这个时候才能在代码中出现import和export关键字

注意

  1. 在使用行内js代码时,代码中不能出现

    <scirpt>
        function asyScript(){
        console.log("</scirpt>");   // 浏览器解析行内脚本的方式决定了它在看到字符串</scirpt>时,会将其当成结束的</scirpt>
                                    // 想要避免这个问题,转义“\”即可,</scirpt>
    }
    </scirpt>
    
  2. 在XHTML中可以标签自闭合<scirpt />,但不能在HTML中使用

  3. 按照惯例,外部js文件的扩展名是.js,但这不是必须的,因为浏览器不会检查扩展名。如果不打算使用.js扩展名,一定要确保服务器能返回正确的MIME类型

  4. 在没有使用defer和async属性时,浏览器会根据script标签在页面中出现的顺序来依次解释它们

  5. 使用了scr属性的script标签,浏览器只会下载执行脚本,从而忽略行内代码

  6. scr属性可以发起跨域get请求,不受浏览器同源策略的限制。当然这个请求仍然受父页面的HTTP/HTTPS协议的限制

位置

现代Web应用程序通常将,js放在元素中页面后面。因为<script>标签的渲染要经过下载、解析、解释才算渲染完成,后续的标签才能被渲染

推迟执行

HTML4.01为<script>元素定义了defer属性,该属性只对外部脚本文件有效。js代码的执行会在解析<\html>后执行

<script defer src="main.js"></script>
<script defer src="main1.js"></script>

HTML5规范要求defer属性的js代码按照它们出现的顺序执行,因此main应先于main1执行,而且两者都会在DOMContentLoaded事件之前执行。但在实际中,defer脚本的执行不一定总按出现顺序执行或在DOMContentLoaded事件之前执行,因此最好只包含一个defer脚本

异步执行

HTML5定义了async属性,告诉浏览器不必等脚本下载和执行完毕后再加载页面,所以多个async脚本并不保证按照它们出现的顺序执行,因此异步脚本不应该在加载期间修改DOM。

异步脚本保证在页面的load事件前执行,但可能在DOMContentLoaded之前或之后执行

动态加载

通过js创建<script>元素并动态设置src属性,在将其添加到页面DOM后才会下载、解析、解析。需要注意的是,js创建的节点默认设置了async属性,需将其属性设置为false

通过上述方法获取资源,对浏览器预加载器是不可见的,会严重影响它们在资源队列中的优先级,可能会严重影响性能。想让预加载器知道这些动态请求文件的存在,可以在文档头部显示的声明它们

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

缓存

浏览器会根据特定的设置缓存所有外部链接的js文件,如果多个页面用到同一个文件,则该文件只需下载一次

<noscript>元素

针对早期浏览器不支持Javascript的问题,需要一个页面优雅降级的处理方案。最终,元素出现,被用于给不支持JavaScript的浏览器提供代替内容。当浏览器不支持脚本或浏览器对脚本的支持被关闭,包含在<noscript>中的内容就会被渲染,否则不会<noscript>中的内容

文档模式

IE5.5发明了文档模式的概念,即可以使用doctype切换文档模式

混杂模式

让IE像IE5一样支持一些非标准的特性

标准模式

让IE具有兼容标准的行为

准标准模式

浏览器支持很多标准的特性,但是没有标准规定得那么严格

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值