HTML5 下载链接 a[download] 绕过 service-worker

Wol*_*lan 7 html firefox google-chrome download service-worker

在我看来,HTML5 下载链接会绕过任何注册的 Service-Worker?这是有意设计吗?

<a href="/assets/images/i_am_cached_by_service_worker.png" download>link</a>
Run Code Online (Sandbox Code Playgroud)

在 Chrome v.62 和 Firefox v.57 中似乎都是这种情况。

在 Firefox 中,它表示它从浏览器缓存(304,未更改)中选择了 .png 文件,该文件位于服务工作人员层之外(注意:所有文件最初都是无缓存提供的)。

在 Chrome 中,下载活动甚至根本不显示在“网络”选项卡中。

仅当我访问 chrome://net-internals/#events 时,我才会看到它,并且它永远不会调用“SERVICE_WORKER_START_REQUEST”,而这似乎是所有其他网络活动都会调用的。它只是绕过 Service-Worker 层,直接到达服务器。


注意:如果我制作传统的下载链接:

<a href="/sw/files/unique_file_only_in_indexeddb.png" target="_blank">link</a>

那么它将由 Service-Worker 很好地处理(假设注册的 Service-Worker 范围位于 URL 根)。

第二。注意:在我的例子中,Service-Worker 范围不在根目录(/​​region/shop),我使用了一种解决方法,让每个附件链接都在同一范围内,确保它由 Service-Worker 处理,但从内部进行处理Server-Worker 本身我可以将该请求重定向到适合我的任何地方(超出范围)。然而,哈希“#”会破坏浏览器下载行为(仅使用正常的 href 链接或 target="_blank" 时),并且会从链接元素中的 url 中排除。因此,注册的 Service-Worker 范围不应包含 SPA 的“#”字符。但这都是一种解决方法,并没有回答最初的问题。