JavaScript API
随着 Web 浏览器能力的增加,其复杂性也在迅速增加。从很多方面看,现代 Web 浏览器已经成为构建于诸多规范之上、集不同 API 于一身的“瑞士军刀”。浏览器规范的生态在某种程度上是混乱而无序的。一些规范如 HTML5,定义了一批增强已有标准的 API 和浏览器特性。而另一些规范如 Web Cryptography API 和 Notifications API,只为一个特性定义了一个 API。不同浏览器实现这些新 API 的情况也不同,有的会实现其中一部分,有的则干脆尚未实现。
最终,是否使用这些比较新的 API 还要看项目是支持更多浏览器,还是要采用更多现代特性 。有些 API 可以通过腻子脚本来模拟,但腻子脚本通常会带来性能问题,此外也会增加网站 JavaScript 代码的体积。
📄️ Atomics 与 SharedArrayBuffer
多个上下文访问 SharedArrayBuffer 时,如果同时对缓冲区执行操作,就可能出现资源争用问题。Atomics API 通过强制同一时刻只能对缓冲区执行一个操作,可以让多个上下文安全地读写一个 SharedArrayBuffer。Atomics API 是 ES2017 中定义的。
📄️ 跨上下文消息
跨文档消息,有时候也简称为 XDM(cross-document messaging),是一种在不同执行上下文(如不同工作线程或不同源的页面)间传递信息的能力。例如,www.example.com 上的页面想要与包含在内嵌窗格中的 p2p.example.com 上面的页面通信。在 XDM 之前,要以安全方式实现这种通信需要很多工作。XDM 以安全易用的方式规范化了这个功能。
📄️ Encoding API
Encoding API 主要用于实现字符串与定型数组之间的转换。规范新增了 4 个用于执行转换的全局类: TextEncoder、TextEncoderStream、TextDecoder 和 TextDecoderStream。
📄️ File API 与 Blob API
Web 应用程序的一个主要的痛点是无法操作用户计算机上的文件。2000 年之前,处理文件的唯一方式是把 `` 放到一个表单里,仅此而已。File API 与 Blob API 是为了让 Web 开发者能以安全的方式访问客户端机器上的文件,从而更好地与这些文件交互而设计的。
📄️ 原生拖放
IE4 最早在网页中为 JavaScript 引入了对拖放功能的支持。当时,网页中只有两种可以触发拖放的元素:图片和文本。拖动图片的方法很简单,只需要在图片上按住鼠标不放然后移动鼠标。而对于文本,必须先选中,然后再以同样的方式拖动。在 IE4 中,唯一有效的放置目标是文本框。
📄️ 媒体元素
随着嵌入音频和视频元素在 Web 应用上的流行,HTML5 新增了两个与媒体相关的元素,即 ` 和 `,从而为浏览器提供了嵌入音频和视频的统一解决方案。
📄️ Notifications API
Notifications API 用于向用户显示通知。无论从哪个角度看,这里的通知都很类似 alert() 对话框: 都使用 JavaScript API 触发页面外部的浏览器行为,而且都允许页面处理用户与对话框或通知弹层的交互。不过,通知提供更灵活的自定义能力。
📄️ Page Visibility API
Web 开发中一个常见的问题是开发者不知道用户什么时候真正在使用页面。如果页面被最小化或隐藏在其他标签页后面,那么轮询服务器或更新动画等功能可能就没有必要了。Page Visibility API 旨在为开发者提供页面对用户是否可见的信息。