14

在处理程序的上下文中,设置标签属性和设置标签beforeunload的功能有什么区别,其中哪一种是发出 GET 请求的首选方法?fetch(keep-alive: true)srcimg

背景:

beforeunload我想在 JavaScript 代码的处理程序中发送 HTTP GET 请求。Navigator.sendBeacon的文档讨论了它对于这个用例有多好,但是

sendBeacon() 方法不提供自定义请求方法的能力

显然,几年前有很多对此类功能的请求最终推荐使用fetch(),内部调用的浏览器方法sendBeacon,并设置了一些特定的标志来解决unload请求问题:

需要对此类请求进行非默认设置的应用程序应使用FETCHAPI 并将 keep-alive 标志设置为 true

fetch(url, {
  method: ..., 
  body: ...,            
  headers: ...,       
  credentials: 'include',
  mode: 'cors',
  keep-alive: true,
})

据我所知,这种类型的调用在功能上等同于Navigator.sendBeacon,关键设置是keep-alive: true

显然,HTML<img>标签 根据规范使用(强调我的):keep-alive: true

一个请求有一个相关联的keepalive标志...这可以用来允许请求比环境设置对象更长寿,例如navigator.sendBeacon和HTML img元素设置这个标志

我对本文档的理解是,通过元素的属性发出GET请求在功能上等同于调用with ,它本身在功能上等同于调用(如果可以发出请求)。unloadimgsrcfetch()keep-alive: truesendBeaconsendBeaconGET

这是准确的吗?

4

1 回答 1

9

根据https://fetch.spec.whatwg.org/#request-class它是keepalive,不是keep-alive

除此之外,是的。添加此功能是为了fetch()消除对sendBeacon().

于 2019-03-30T19:39:00.527 回答