| 2 min read

如果你更新了最新的 Chrome (大约 >= 73 的部分版本),发现有些日志没有发送的时候,需要引起注意了。你需要关注是否有一些异常或者警告产生类似

Uncaught DOMException: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'https://xxxx/': Synchronous XHR in page dismissal.

目前还并不能明确具体会在什么版本采用这个策略,当前有可能只是部分版本限制了

至今, Synchronous XHR 都是不被推荐使用的,但是我们还是会在一些特殊场景中使用到,比如页面 unload 或者 beforeunload 用于表示用户离开页面的数据发送。不过不好的消息便是,Chrome 正计划限制这类似的请求。 于是乎我们看到了很多人在最近几天发布了这个问题

传送门 https://stackoverflow.com/questions/55676319/ajax-synchronous-request-failing-in-chrome

目前比较好的解决方式只有 navigator.sendBeacon(), 它不会阻塞 main thread的执行, 完成数据方面的发送,可以发送简单的 url 请求,也可以发送比较复杂的 JSON 数据。

你可以阅读这篇文章简单了解下 sendBeacon 的使用。

当然自己遇到这样的心情,也只能用苏大强表示了

You Can Speak "Hi" to Me in Those Ways