# sendBeacon统计数据

**navigator.sendBeacon()** 方法可用于通过HTTP (opens new window)将少量数据异步传输到Web服务器。
刷新/关闭页面之前发送请求。

# 开始

# 参数

navigator.sendBeacon(url, data);
----url 参数表明 data 将要被发送到的网络地址。
----data 参数是将要发送的 ArrayBufferView (opens new window) 或 Blob (opens new window)DOMString (opens new window) 或者 FormData (opens new window) 类型的数据。

# 返回值

当用户代理成功把数据加入传输队列时,sendBeacon() 方法将会返回 true,否则返回 false

# 代码

const data = JSON.stringify({
  eventSn: eventId,
  sendingTime: Date.now(),
  token: this.people.token,
  eventVariable: eventLevelVariables,
  defaultVariable: {
    ...this.global,
    ...this.page(),
    is_first_time,
    ...{
      open_id: this.people.open_id,
      udid: this.people.udid,
    },
    title: document.title,
  },
})


if (navigator.sendBeacon && parser.os.name !== 'iOS') {
  window.navigator.sendBeacon(URL, data)
} else {
  var client = new XMLHttpRequest()
  client.open('POST', URL, async)
  client.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8')
  client.send(data)
}

# 支持

image.png

# 参考

  1. Navigator.sendBeacon()-MDN (opens new window)
  2. Hunter埋点系统 (opens new window)