在beforeunload
处理程序的上下文中,fetch(keep-alive: true)
和设置src
标记的img
属性之间的功能区别是什么?哪种是发出GET请求的首选方法?
背景:
我想在JavaScript代码的beforeunload
处理程序中发送HTTP GET请求。 Navigator.sendBeacon
的文档讨论了此用例but的性能如何
显然,几年前有很多用于这种功能的requests,culminated中的recommendation使用fetch()
(sendBeacon
内部调用的浏览器方法),并设置了一些特定的标志来解决unload
请求问题:
fetch(url, {
method: ...,
body: ...,
headers: ...,
credentials: 'include',
mode: 'cors',
keep-alive: true,
})
据我所知,这种调用在功能上等同于
Navigator.sendBeacon
,键设置为keep-alive: true
。显然,根据规范(重点是我的),HTML
<img>
标签也为uses keep-alive: true
:我对本文档的理解是,通过
GET
元素的unload
属性对img
发出src
请求在功能上等效于使用fetch()
调用keep-alive: true
,其功能上等效于调用sendBeacon
(如果sendBeacon
可以发出GET
请求)。这个准确吗?
最佳答案
根据https://fetch.spec.whatwg.org/#request-class,它是keepalive
,不是keep-alive
。
除此之外,是的。此功能已添加到fetch()
中,从而不再需要sendBeacon()
。