HTML5 API

一、通信 communication

1.1 WebSockets

  1. WebSockets 是什么?
    WebSockets 是一个应用层协议,与 http 协议一样,是基于 TCP 协议的。
    与 http 协议的不同之处在于:它是一个双向协议,即既可以从客户端发起请求,也可以从服务端发起请求。而 http 是只能从客户端发起请求的。

  2. WebSockets 有什么作用?
    从 WebSockets 与 http 协议的不同可以看出,它非常适用于需要客户端与服务端双向发起请求的业务场景。比如说:直播,实时聊天等

  3. 如何使用 WebSockets?
    客户端示例:

let ws = new WebSocket('wss://12.233.233.40')
// 开启webSocket
ws.onopen = function(msg) {
    // 发送信息给服务端
    ws.send('hello')
}
// 接收服务端信息
ws.onmessage = function(msg) {
    console.log('Received message: ' + msg)
    // 关闭websocket
    ws.close()
}

1.2 跨域通信机制

  1. 为什么需要跨域通信机制?

    • 浏览器有一个“同源政策(same-origin policy)”,限制非同源时,无法获取Cookie、localStorage 等数据、无法获取 dom、无法发送 ajax 请求
    • 这种方式会使得一些合理的用途也受到影响。如:两个网站一级域名相同,二级域名不同,也不属于同源,无法共享信息
    • 因此需要有一种安全的跨域通信机制来解决这个问题
  2. 如何实现跨域通信?
    过去已经有一些跨域通信的实现方式,HTML5 又给出了一个解决方案,一个api:postMessage
    这是客户端的一个api,允许来自不同源的脚本通信,实现跨域消息传递。如:

发送message:

// postMessage接收两个参数:msg(消息内容),origin(目标窗口的源,协议+主机+端口号)
window.frame[0].postMessage('hello', 'http://10.283.27.44')

接收message:

// 发送消息会触发 message 事件,监听这个事件就可以获取到发送的 msg
window.addEventListener('message', function(res){
    let data = res.data
    console.log(data);
})

二、离线 & 存储 storage

2.1 cookie、localStorage、sessionStorage 的区别

31DE8088-3002-45D9-AC2F-AA7357DC6405.png

2.2 localStorage

Window.localStorage.setItem('name', 'kris')
Window.localStorage.getItem('name')   // kris

2.3 sessionStorage

Window.sessionStorage.setItem('name', 'kris')
Window.sessionStorage.getItem('name')   // kris

2.4 离线存储

  • 离线存储指HTML5提供一种缓存机制,使得基于 web 的应用程序可以离线运行。
  • 离线存储的实现方式是为应用页面中的 <html> 元素增加 manifest 属性,值为一个缓存清单文件(后缀为 appcache)
    如:
<html manifest="example.appcache">
</html>
  • 这个缓存文件里有一系列的 URL 列表,这些 URL 分别指向页面中的 html、css、javascript、图片等相关内容

三、多媒体 media

3.1 audio 和 video

  • HTML5 增加了 <video> 和 <audio> 标签,使得开发者可以直接使用 HTML 在 web 中嵌入音频和视频
  • HTML5 还增加了一些 js 的 api,用于对音频和视频进行控制,如:
function dealVideo() {
    let video = document.getElementByTagName('video')
    if (video.paused) {
        video.play()
    } else {
        video.paused()
    }
}

3.2 实时通信

  • WebRTC 中的 RTC 指实时通信,它是一种支持在浏览器客户端之间语音/视频交流的技术。
  • WebRTC 组件通过 Javascript API 获得,包含网络流 API, 点对点连接 API, 数据 API 等

3.3 Camera API

  • 通过 Camera API,可以使用手机摄像头拍照,后将拍的照片发送给当前网页。
  • 这些操作主要通过一个 input 元素实现,其中 type 属性必须为 file,如:
<input type="file" accept="image/*">

四、3D & 图像

4.1 canvas

  • canvas 是一个位图画布
  • canvas 是一个可以使用 js 来绘制图形的 html 元素,可以实现绘制图表、动画等

4.2 webGL

  • WebGL 是一个 javascript API,用于在任何兼容的浏览器中呈现交互式3D和2D图形,无需使用插件
  • WebGL 也可在 <canvas> 元素中使用

五、设备访问

5.1 使用地理位置定位

  • HTML5 允许请求位置信息,若用户同意,浏览器就会返回位置信息。
  • 地理位置 API 通过 navigator.geolocation 提供,如果该对象存在,那么地理位置服务可用
    获取地理位置举例:
navigator.geolocation.getCurrentPosition(function(position) {
    console.log(position.coords.latitude, position.coords.longitude)
})

5.2 检测设备方向

  • 基于 web 的设备越来越多地能够确定设备的方向
  • 有两种 js 事件负责处理设备方向信息:deviceorientation 和 devicemotion
  • deviceorientation 会在加速度传感器检测到设备在方向上发生变化时触发
  • devicemotion 会在加速度发生改变时触发

5.3 触控事件

  • 触摸事件提供了在触摸屏或在触摸板上解释手指(或触控笔)活动的能力
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容