【发布时间】:2018-03-27 06:47:43
【问题描述】:
在不使用服务工作者的 Web 纯原生 JavaScript 应用程序中,我想显式缓存位于 AWS S3 文件服务器上的 JavaScript 文件。以下脚本将位于应用程序的 index.html 文件中(我已修改 URL,因为它是客户端项目):
<script>
caches.match('https://s3.amazonaws.com/com.myproject/myjavascript.js')
.then(function(response) {
if (response) {
return response;
} else {
fetch('https://s3.amazonaws.com/com.myproject/myjavascript.js')
.then(function(res) {
return caches.open('mycache')
.then(function(cache) {
cache.put('https://s3.amazonaws.com/com.myproject/myjavascript.js',res.clone());
console.log(res.clone());
return res;
});
});
}
});
</script>
我相信这段代码应该执行以下操作:检查 myjavascript.js 文件是否在缓存中。如果是,则返回将由浏览器执行的 JavaScript 文件。如果在缓存中没有找到 myjavascriptfile.js,则将其取出并放置在子缓存“mycache”中,最后返回到执行它的浏览器。
运行此程序后,我在缓存中找到文件的 URL,响应为“Ok”,但浏览器未执行代码,并且在 Chrome 浏览器开发人员中的源代码中看不到文件内容工具。
为什么这不起作用?我的想法有什么问题。
非常感谢, 弗雷德
【问题讨论】:
-
您在控制台日志中得到了什么?
-
您确定这不能使用 htaccess、http 标头等中的声明来完成吗?此外,这些 javascript 命令是否与所有当前浏览器兼容?另外,可能有一个 js 库可以处理这个问题。
-
感谢您的评论 Eyal。 Fetch 有很好的浏览器支持(目前全球 79%:caniuse.com/#search=fetch)。这是一个技术要求,我为此使用了 Vanilla JavaScript,是的,JQuery 可以处理这个问题。
标签: javascript html caching progressive-web-apps