CacheStorage API 可以从普通网页 JavaScript 以及 service worker 访问,因此如果您在访问的服务器上创建网页window.caches
,您应该能够从缓存中获取内容并做任何您想做的事情。一旦你有了cache.keys()
,你可以遍历它并使用match()
它返回该请求的响应。然后,您可以将它们打印出来进行复制和粘贴(可能并不理想),将每个文件发布到保存它们的服务器,或类似的。
这是我在 traintimes.org.uk 上的一些普通 JS;仅显示脱机页面列表,但如果需要,它可能会获取实际的缓存条目。
<script>
// Open the page cache
caches.open("pages")
// Fetch its keys (cached requests)
.then(cache => cache.keys())
// We only want the URLs of each request
.then(reqs => reqs.map(r => r.url))
// We want most recent one first (reverse is in-place)
.then(urls => (urls.reverse(), urls))
// We don't care about the domain name
.then(urls => urls.map(u => u.replace(/^.*?uk/, '')))
// We want them to be clickable links
.then(urls => urls.map(u => [
'<a href="', u, '">',
u.replace(/\?cookie=[^;&]*/, ''),
'</a>'].join("")))
// We want them to be visible on the page
.then(urls =>
document.getElementById('offline-list').innerHTML =
'<li>' + urls.join('</li><li>') + '</li>'
);
</script>