【问题标题】:Will a `fetch` call continue if the tab is closed?如果选项卡关闭,“fetch”调用会继续吗?
【发布时间】:2020-04-02 13:55:36
【问题描述】:

浏览器现在提供Fetch API,您可以像这样从 JavaScript 发出网络请求:

const response = await fetch('http://example.com/movies.json');
const myJson = await response.json();

如果用户在调用fetch 和履行承诺之间关闭选项卡会发生什么?浏览器会丢弃请求吗?如果对fetch 的调用发生在unloadbeforeunload 事件中怎么办?

我知道sendBeacon 是用于此目的的API 调用,但我想知道sendBeacon 是否已经过时,因为我们有fetch

【问题讨论】:

  • 标准说“强制关闭事件源”,当关闭一个文档时。 fetch instance 是一个事件源,在文档closing process 期间被中止。

标签: javascript browser fetch-api


【解决方案1】:

如果触发它的 JS 环境消失时 HTTP 请求已经发送,那么它已经发送。

如果它在此之前消失,则不会发送请求。

如果在环境消失之前加载事件还没有触发,那么事件处理程序将永远不会被调用。它已经不存在了。

如果 fetch 调用发生在 unload 或 beforeunload 事件中怎么办?

那么,JS 环境很可能会在请求发送之前消失。

我知道 sendBeacon 是用于此目的的 API 调用

是的

但我想知道既然我们有 fetch,sendBeacon 是否已经过时了。

没有

【讨论】:

  • 我更感兴趣的是请求是否完成,而不是JS环境是否还在运行。从您的回答看来,只有sendBeacon 可用于发送请求并确保请求不会因为选项卡关闭而中止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2019-05-01
  • 2011-08-25
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
相关资源
最近更新 更多