在beforeunload
处理程序的上下文中,fetch(keep-alive: true)
和设置src
标签的img
属性之间的功能区别是什么?发出GET请求的首选方法?
背景:
我想用JavaScript代码在beforeunload
处理程序中发送HTTP GET请求。 Navigator.sendBeacon
的文档讨论了此用例but
sendBeacon()方法不提供自定义请求方法的功能
显然,几年前有很多requests都具有这种功能,culminated中的recommendation使用fetch()
,{ {1}},并设置了一些特定的标志来解决sendBeacon
请求问题:
需要非默认设置的应用程序应使用
unload
API,并将keep-alive标志设置为true
FETCH
据我所知,这种呼叫在功能上等效于fetch(url, {
method: ...,
body: ...,
headers: ...,
credentials: 'include',
mode: 'cors',
keep-alive: true,
})
,密钥设置为Navigator.sendBeacon
。
显然,根据规范(强调我),HTML keep-alive: true
标签也是 uses keep-alive: true
:
请求具有关联的keepalive标志...该标志可用于允许请求的生存期超过环境设置对象,例如navigator.sendBeacon和 HTML img元素设置此标志 >
我对此文档的理解是,通过<img>
元素的GET
属性在unload
上发出img
请求在功能上等同于使用{ {1}},在功能上等效于调用src
(如果fetch()
可以发出keep-alive: true
个请求)。
这是准确的吗?
答案 0 :(得分:1)
根据https://fetch.spec.whatwg.org/#request-class,它是keepalive
,而不是keep-alive
。
除此之外,是的。此功能已添加到fetch()
中,以消除对sendBeacon()
的需求。