ServiceWorkers可以覆盖no-src子iframe请求吗?

时间:2016-04-15 03:55:31

标签: google-chrome cross-domain service-worker

假设我有一个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与调用者的文档相关联。

1 个答案:

答案 0 :(得分:1)

看起来这是一个bug in Chrome(虽然有趣的是Firefox有相同的行为)。

(与我之前的建议相反,您不应该在iframe中明确注册服务工作者。)