在我看来,HTML5下载链接会绕过任何已注册的服务工作者?这是预期的设计吗?
<a href="/assets/images/i_am_cached_by_service_worker.png" download>link</a>
在Chrome v.62和Firefox v.57中都有这种情况。
在Firefox中,它说它从浏览器缓存(304,未更改)中选择了.png文件,该文件位于服务工作者层之外(注意:所有文件最初都是使用no-cache提供的。)
在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根目录)。
第二。注意:在我的情况下,服务工作者范围不是根( / region / shop ),我使用一种解决方法,我将每个附件链接都放在同一范围内,确保它是由Service-Worker处理,但是从Server-Worker本身内部我可以将该请求重定向到适合我的地方(范围之外)。 哈希'#'打破了浏览器下载行为(当仅使用普通的href链接或target =“_ blank”时)并且从link元素中的url中排除。注册服务 - 工作人员范围因此不包括SPA的'#'字符。这是一个解决方法,但不回答原始问题。