2017-03-16 135 views
0

发生意外,并且某个HTML页面被设置为由浏览器缓存。我们不想更改该网页的网址,因为其他各方都依赖该网址(包括SEO)。如何强制浏览器重新加载缓存的URL而不更改URL

有没有办法让尽可能多的客户端重新加载该页面?客户经常在网站上浏览时访问该页面,所以我们经常能够在他们遇到问题页面之前向他们发送一些新的JavaScript(或任何其他资源)。也许有一个JavaScript技巧来强制重新加载?!

+1

从服务器发送页面时,您可以设置'缓存控制'标题,检查出这个答案(http://stackoverflow.com/questions/49547/how-to-control-web-page-缓存 - 所有浏览器)列出了如何做到这一点。我不知道如何强制人们删除缓存,如果它已被缓存但 – George

回答

2

代码片断下面将失效与URI相同页面的缓存条目uriOfCachedPage

var xhr = new XMLHttpRequest(); 
xhr.open("GET", uriOfCachedPage, true); 
xhr.setRequestHeader("Cache-Control", "max-age=0"); 
xhr.send(); 

您需要将此代码注入到用户可能会获得的脚本或HTML页面中。

欲了解更多信息,请参阅MDN上的XMLHttpRequest页和RFC 7232超文本传输​​协议(HTTP/1.1)中的Request Cache-Control Directives部分:缓存。

您还可以在cookie或localStorage中存储cachedPageReloaded标志,并且只有在之前未使其无效时才使缓存条目无效。在MDN上检查Document.cookieWindow.localStorage页面。

-1

您可以添加时间戳在您的网址的结尾查询字符串:

var url = "http://yoursite.com/your.html?r=" + (new Date()).getTime(); 

您可以调用没有cache选项不更改URL AJAX请求,并没有刷新页面或者:

$.ajax({ 
     url: "your.html", 
     cache: false, //<== don't cache! 
     type: "GET", 
     dataType: "json", 
     success: function(data, textStatus) { 
         $("#body").html(data); 
       } 
    }); 

寻找JavaScript解决方案?

window.location.reload(true); 

Full HTML solution

<meta http-equiv="cache-control" content="max-age=0" /> 
<meta http-equiv="cache-control" content="no-cache" /> 
<meta http-equiv="expires" content="0" /> 
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> 
<meta http-equiv="pragma" content="no-cache" /> 
从服务器端添加这些头

Furher阅读:https://stackoverflow.com/a/2068407/3958365

+0

这将改变我们不能做的页面的URL。 – boot4life

+0

哪一个?有4种不同的解决方案... – ErTR

+1

不知道这里发生了什么。我真的没有看到其他人吗?!当我评论时,我很确定他们不在那里。无论如何,只有AJAX才能工作,因为缓存实际上我无法将JS或元标记传递到该页面。顺便说一句,我没有倒下。 – boot4life