我想使用 Service Workers 来增强现有网站。特别是,我想通过让 Service Workers 在实际资源不可用时使用占位符资源响应请求来添加更好的离线支持。这种方法一直有效,但我遇到了障碍。站点中有几个地方使用同步 XHR 请求来加载某些资源,而我的 Service Worker 在 Chrome 中没有接收到它们的事件。 (请不要建议消除同步 XHR 请求。这是需要的,但超出了范围。)
Service Worker 是否应该可以响应同步 XHR 请求?我可以想象这实现起来很复杂,如果不支持它我会理解。 W3C Service Workers Specification (Working Draft) 之间应该存在“正确”答案和 WHATWG Fetch Specification (Living Standard) ,但我还没有完成对它们的破译。我希望能解释规范如何描述是否应支持此行为,和/或任何关于指定或实现此行为的讨论引用。
最佳答案
理论上
是的,service workers 应该能够响应同步 XHR 请求。这在规范中没有明确说明,但没有异常(exception)会导致同步 XHR 请求被区别对待,W3C Web 平台测试 (WPT) 套件有一个测试用例来验证它是否受支持:wpt/service-workers/service-worker/fetch-request-xhr-sync.https.html
.
实践
自 2019 年 1 月起,Service Worker 可以在 Firefox 和 Edge 中响应同步 XHR 请求,但不能在 Chrome 或 Safari 中响应。 Chrome 是 planning to add support soon ,但我们不知道 Safari 是否会这样做。
最新的浏览器支持矩阵可用 at WPT.fyi .您可以在自己的浏览器中运行 WPT 测试用例 https://w3c-test.org/service-workers/service-worker/fetch-request-xhr-sync.https.html .
关于javascript - Service Worker 可以响应同步的 XHR 请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35879844/