在beforeunload
处理程序的上下文中,fetch(keep-alive: true)
和设置src
标记的img
属性之间的功能差异是什么,以及哪些是制作GET请求的首选方法?
背景:
我想在JavaScript代码中的beforeunload
处理程序中发送HTTP GET请求。 Navigator.sendBeacon
的文档讨论了这个用例but有多好
sendBeacon()方法不提供自定义请求方法的功能
显然几年前有很多requests用于这样的功能,culminated在recommendation使用fetch()
,sendBeacon
内部调用的浏览器方法,一些特定的标志设置来解决unload
请求问题:
需要对此类请求进行非默认设置的应用程序应使用
FETCH
API并将keep-alive标志设置为true
fetch(url, {
method: ...,
body: ...,
headers: ...,
credentials: 'include',
mode: 'cors',
keep-alive: true,
})
据我所知,这种类型的调用在功能上等同于Navigator.sendBeacon
,关键设置是keep-alive: true
。
显然HTML <img>
标签也根据规范uses 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()
,以淘汰qazxswpoi的需求。