javascript - Service Worker 可以响应同步的 XHR 请求吗?

标签 javascript html xmlhttprequest service-worker fetch-api

我想使用 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/

相关文章:

javascript - 似乎无法为选择选项设置默认选项;使用 Angular

java - 元素类型 "META"必须由匹配的结束标记 "</META>"终止。使用 XSL 从 XML 文件生成 PDF 时

javascript - 如何使用 javascript 将 ISO 字符串转换为日期格式 dd/mm/yyyy

javascript - 如何在 TypeScript 中创建可在纯 JavaScript 中使用的全局命名空间/类?

javascript - Ember.js:这些 .pushObject() 调用是同义的吗?

jquery - 悬停时显示图像不起作用

javascript - 仅在使用 javascript 和 html 的浏览器中在相同的两个选项卡之间切换

javascript - 没有 jQuery 的 JSON

Angular 5 混合屏蔽内容

javascript - 多个 xmlhttp 请求会导致除最后一个实例之外的所有实例的就绪状态都不会达到 4。