使用 javascript 客户端,如何显示 "virtual folder"(= html、img、js 的连贯集合以及相对路径)?

Using javascript client-side, how can I display a "virtual folder" (= a coherent collection of html,img,js with relative paths)?

我想在 html 页面上显示自主“站点”(比如“root”)。 这些“站点”包含一个着陆页:index.html 和一组 *.css、.js、.png)
所谓自治,是指这些站点没有外部依赖性,并且所有路径都是相对的 = 您可以将它们复制到任何目录或将它们托管在任何地方,它们将正常工作。
这些网站被压缩在一个包含所有必要文件的档案中。 说我下载没问题,所有文件都在内存中(作为 path/uint8 数组)

如何以安全的方式显示网站? 我可以解析 index.html,更改原始文件的 data-url 的所有 src 和 href,并将其加载到 iframe 中。 它工作得很好,但它会在有这样的脚本的地方中断

if (extension == "pdf")
 img.src = "images/thumb-pdf.png"

有什么方法可以控制 iframe 提供的 url 吗? 某种代理? 我可以拦截“images/thumb-pdf.png”来代替 MemoryCacheOfAllFiles[images/thumb-pdf.png"].toDataURL() 服务吗?

PS:当然我无法控制那些网站,我不能将它们存储在服务器上(这很容易)

在 javascript 中可以使用代理,必须使用 worker 并监听“获取”事件以推送虚拟内容。

html 推入 iframe:

...
navigator.serviceWorker.register('worker.js').then(function() {
    logInstall('Installing...');
  })
...

worker.js:

...
self.onfetch = function(event) {
  var cached = (mycache[event.request.url]); // do we have content
  if (cached)
    event.respondWith(new Response(cached.content,{
      headers:{"Content-Type",cached.mimetype}
    }
  else
    event.respondWith(fetch(event.request));
}
...

mozilla 的完整代码,用于解压缩和提供内容
https://serviceworke.rs/cache-from-zip.html