假设我有一个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内容触发的所有请求都跳过了worker。
在获取资源时,有没有办法让iframe使用外部工作程序?
我假设一个选项是让iframe从服务器加载虚拟HTML文件,以便iframe具有正确的来源,我只是希望我可以避免需要将当前的iframe方法更改为这样做(并且必须延迟渲染,直到加载该页面),因为在JS是的情况下,对于以下情况来说,将空白&#39;风格的iframe视为同源,这似乎并不合理。能够跨越框架边界。
我也试图做
document.body.firstChild.contentWindow.navigator.serviceWorker.register(...)
使用外部窗口中使用的相同工作程序,但结果为
DOMException:无法注册ServiceWorker:没有URL与调用者的文档相关联。