Emm*_*ler 6 javascript browser analytics http sendbeacon
在beforeunload处理程序的上下文中,标记fetch(keep-alive: true)的src属性和设置img标记的属性之间的功能区别是什么?哪些是发出GET请求的首选方法?
背景:
我想beforeunload在JavaScript代码的处理程序中发送HTTP GET请求。Navigator.sendBeacon的文档讨论了此用例的优点,但是
sendBeacon()方法不提供自定义请求方法的功能
显然,几年前对此类功能的请求很多,最终提出了对use 的推荐,即使用fetch()内部调用by的浏览器方法sendBeacon,并设置了一些特定的标志来解决unload请求问题:
需要此类请求的非默认设置的应用程序应使用将
FETCHkeep-alive标志设置为true 的API
fetch(url, {
method: ...,
body: ...,
headers: ...,
credentials: 'include',
mode: 'cors',
keep-alive: true,
})
Run Code Online (Sandbox Code Playgroud)
据我所知,这种调用在功能上等效于Navigator.sendBeacon,键设置为keep-alive: true。
显然,HTML <img>标签也 采用keep-alive: true根据规范(重点煤矿):
请求具有关联的keepalive标志...该标志可用于允许请求超过环境设置对象的寿命,例如,navigator.sendBeacon和HTML img元素设置此标志
我本文档的理解是,制作GET上要求unload通过img元素的src属性在功能上等同于调用fetch()用keep-alive: true,这是本身在功能上等同于调用sendBeacon(如果sendBeacon可能使GET请求)。
这个准确吗?
根据https://fetch.spec.whatwg.org/#request-class它是keepalive,不是keep-alive。
除此之外,是的。添加此功能是fetch()为了过时对sendBeacon().