强制浏览器重新加载所有我的js和模板 - JavaScript单页应用

20 浏览
0 Comments

强制浏览器重新加载所有我的js和模板 - JavaScript单页应用

我有一个简单的JavaScript单页应用程序,使用requirejs、underscore和jQuery来提供帮助材料,没有服务器页面。我对JavaScript单页应用程序还很陌生,想知道如何强制浏览器在更改时重新加载我的文件?我是从amazons3上提供我的文件,而不是通过Apache或其他可以重新启动的服务器。我不是在询问crtl+f5或其他命令或应用缓存头,对于JavaScript单页应用程序来说,重新加载文件的做法是什么?单页应用程序旨在一次性将所有HTML、CSS和JavaScript文件下载到客户端,然后根据用户操作从服务器更新数据,而不是为每个请求从服务器下载HTML。当我尝试我的单页应用程序时,它工作得很好,但是当我对js文件进行了一些更改后,我无法看到这些更改,所以我该如何配置JavaScript单页应用程序以下载修改后的文件。

0
0 Comments

问题的原因:

浏览器只会听从服务器的指示。重新发布(或停止/启动)服务器,它将获取文件的更改并告诉浏览器开始使用它们。

解决方法:

重新发布(或停止/启动)服务器。

0
0 Comments

问题的原因是网站的js和模板文件被浏览器缓存,导致更新后的文件无法及时加载。解决方法可以是设置缓存头信息,告诉浏览器不要缓存文件,或者通过在文件URL中添加随机数或时间戳来使浏览器认为是不同的文件,从而强制浏览器重新加载。

以下是整理后的文章:

当我们开发JavaScript单页应用时,我们经常遇到一个问题:如何强制浏览器重新加载所有的js和模板文件,而不使用缓存版本。下面我们来看一下这个问题的原因以及解决方法。

在开发过程中,如果我们不希望浏览器缓存我们的文件,我们需要在响应中设置缓存头信息。相关的设置可以参考这篇文章:http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/。但是如果只是为了开发目的,我们可以直接清除缓存。在Chrome浏览器中,我们可以打开开发者工具,然后通过右键点击刷新按钮来清除缓存,只需要两次点击,非常方便。

然而,在我的情况下,由于我没有一个服务器在我的控制下,我是从Amazon S3中提供文件的。我知道可以使用Ctrl+F5、Ctrl...等方式来强制刷新,但当用户访问我的网站时,我无法要求每个人都这样做。因此,我想知道如何通过JavaScript来强制浏览器重新加载所有文件,而不使用缓存版本。我不希望像服务端页面那样使用缓存头信息来更改数据,我的情况只是在更新一些js文件或模板时,我需要浏览器加载这些文件,而不使用缓存版本。

有一种解决方法是通过Amazon S3来控制缓存头信息。在Google上搜索“Amazon S3 Cache Control Header”可以找到很多相关的帮助文档。另外,还可以使用JavaScript来动态更改脚本的URL,通过在查询字符串中添加一个随机数或时间戳(例如.../myscript.js?r=12232412),使浏览器认为它是一个不同的文件。只需在每次渲染页面时执行此操作即可。据我所知,目前没有办法以跨浏览器兼容的方式从JavaScript中编程清除实际的缓存。

通过以上方法,我们可以有效地解决强制浏览器重新加载所有js和模板文件的问题。无论是通过设置缓存头信息,还是通过动态更改URL,我们都可以确保浏览器加载最新的文件版本,提供更好的用户体验。

0