使用 ServiceWorker 缓存 iframe 请求

Pan*_*nni 5 javascript iframe caching service-worker

我正在尝试使用我的 ServiceWorker(使用 sw-toolbox.js)缓存 iframe 的请求。

但是,无论我尝试什么,都不会像 Chrome Network Tab 告诉我的那样从 ServiceWorker 提供文件。

这是我的 service-worker.js:

'use strict';
importScripts('./build/sw-toolbox.js');

self.toolbox.options.cache = {
    name: 'ionic-cache'
};

var static_urls = [
    'https://quiqqer.local/test?app=1',
    'https://quiqqer.local/calendar?app=1'
];

self.toolbox.precache(static_urls);

self.toolbox.router.any('/(.*)', self.toolbox.cacheFirst, {origin: 'https://quiqqer.local'});

self.addEventListener('install', function (event)
{
    self.skipWaiting();
});

self.toolbox.router.default = self.toolbox.cacheFirst;
Run Code Online (Sandbox Code Playgroud)

self.toolbox.precache() 函数正确地向我的 static_url 发出请求,正如我在网络选项卡中看到的那样。

但是来自 iframe 的所有请求(转到https://quiqqer.local/)似乎都没有通过 ServiceWorker 路由。

我究竟做错了什么?或者不能缓存 iframe 请求?

使用 Linux 在 Chromium 上运行。

提前致谢

Jef*_*ick 5

可能有一个官方的 HTML 规范提供了更规范的答案,但我只是从MDN 文档中摘录:

HTML 元素代表一个嵌套的浏览上下文,有效地将另一个 HTML 页面嵌入到当前页面中。... 每个浏览上下文都有自己的会话历史记录和活动文档。包含嵌入内容的浏览上下文称为父浏览上下文。

你可以认为这是怎么回事在的<iframe>,包括加载请求<iframe>src本身,等同于是否会发生什么,<iframe>是在一个单独的标签加载。除非服务人员控制父浏览上下文(即您的顶级页)也恰好包含<iframe>src在其范围内,即服务人员将不会有任何控制权初始加载<iframe>或从提出的要求<iframe>