Beacon API - Web APIs 编辑
The Beacon
interface is used to schedule an asynchronous and non-blocking request to a web server. Beacon requests use the HTTP POST method and requests typically do not require a response. Requests are guaranteed to be initiated before a page is unloaded and they are run to completion, without requiring a blocking request (for example XMLHttpRequest
).
Note: This API is not available in Web Workers (not exposed via WorkerNavigator
).
Example use cases of the Beacon API are logging activity and sending analytics data to the server.
Example code of the interfaces described in this document is included in Using the Beacon API.
Why use Beacon?
The Beacon
interface addresses the needs of analytics and diagnostics code that typically attempts to send data to a web server before unloading the document. Sending the data any sooner may result in a missed opportunity to gather data. However, ensuring that the data is sent during the unloading of a document is something that has traditionally been difficult for developers.
User agents will typically ignore asynchronous XMLHttpRequests
made in an unload handler. To solve this problem, analytics and diagnostics code will typically make a synchronous XMLHttpRequest
in an unload
or beforeunload
handler to submit the data. The synchronous XMLHttpRequest
forces the browser to delay unloading the document, and makes the next navigation appear to be slower. There is nothing the next page can do to avoid this perception of poor page load performance.
There are other techniques used to ensure that data is submitted. One such technique is to delay the unload to submit data by creating an Image element and setting its src
attribute within the unload handler. As most user agents will delay the unload to complete the pending image load, data can be submitted during the unload. Another technique is to create a no-op loop for several seconds within the unload handler to delay the unload and submit data to a server.
Not only do these techniques represent poor coding patterns, some of them are unreliable and result in the perception of poor page load performance for the next navigation. The Beacon API provides a standard way to address these issues.
Global context
The Beacon API's Navigator.sendBeacon()
method is used to send a beacon of data to the server in the global browsing context. The method takes two arguments, the URL and the data to send in the request. The data argument is optional and its type may be an ArrayBufferView
, Blob
, DOMString
, or FormData
. If the browser successfully queues the request for delivery, the method returns "true
" and returns "false
" otherwise.
Browser compatibility
The Navigator.sendBeacon().Browser_compatibility
table indicates that method has relatively broad implementation.
See also
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论