假设我有一个已成功注册 ServiceWorker 的页面,我可以这样做
document.body.innerHTML = `<img src="some-img.jpg" />`;
触发工作人员可以处理的新请求。然而
document.body.innerHTML = `<iframe></iframe>`;
document.body.firstChild.contentDocument.body.innerHTML =
`<img src="some-img.jpg" />`;
不会被工作人员拾取,至少从我在 Chrome 49 中看到的来看是这样。
在我的特定情况下,我们的测试依赖于渲染 iframe,然后渲染 iframe 内的内容以达到样式范围的目的,我希望能够通过积极缓存加载期间加载的资源来加快我们的测试速度。测试,但 iframe 内的内容触发的所有请求都会跳过工作线程。
有什么方法可以让 iframe 在获取资源时使用外部 worker 吗?
我假设一种选择是让 iframe 从服务器加载一个虚拟 HTML 文件,以便 iframe 具有正确的来源,我只是希望我可以避免需要更改我们当前的 iframe 方法来做到这一点(并且必须延迟渲染直到该页面加载),因为在 JS 能够跨越框架边界的情况下,“about:blank”样式的 iframe 被视为同源似乎并不是不合理的。
更新
我也尝试过这样做
document.body.firstChild.contentWindow.navigator.serviceWorker.register(...)
在外部窗口中使用相同的工作人员,但这会导致
DOMException: Failed to register a ServiceWorker: No URL is associated with the caller's document.
最佳答案
看起来这是一个 bug in Chrome (尽管有趣的是 Firefox 有相同的行为)。
(与我之前的建议相反,您不需要在 iframe 中显式注册 Service Worker。)
关于google-chrome - ServiceWorkers 可以覆盖 no-src 子 iframe 请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36637979/