Javascript location.reload with cache
如果你对这个问题有更好的标题,请随意编辑 在最长的时间里,我总是使用Javascript location.reload with cache,javascript,caching,reload,Javascript,Caching,Reload,如果你对这个问题有更好的标题,请随意编辑 在最长的时间里,我总是使用location.reload()来重新加载页面-这是最合乎逻辑的事情,对吗 但我最近注意到,它并不像我最初认为的那样等同于F5,而是更多地等同于Ctrl+F5。所有图像和其他链接文件都是从服务器重新请求的,而我只想重新加载页面 我发现我可以使用location.replace(location.href)来实现我想要的效果:重新加载页面,但从缓存中检索链接文件 这是否理想?还有比这更好的方法吗?我是否忽略了这种方法可能存在的任
location.reload()
来重新加载页面-这是最合乎逻辑的事情,对吗
但我最近注意到,它并不像我最初认为的那样等同于F5,而是更多地等同于Ctrl+F5。所有图像和其他链接文件都是从服务器重新请求的,而我只想重新加载页面
我发现我可以使用location.replace(location.href)
来实现我想要的效果:重新加载页面,但从缓存中检索链接文件
这是否理想?还有比这更好的方法吗?我是否忽略了这种方法可能存在的任何陷阱
(注意:通过将
filemtime
附加为查询字符串,我已经对链接文件(如脚本)进行了缓存破坏管理)在回答我自己的问题时,存在一个巨大的陷阱:当位置包含散列时,浏览器将跳转到该散列,而不是重新加载页面
我实施的解决方案如下:
reload = (function() {
var m = location.search.match(/[?&]__hash=([^&]+)/);
if( m) location.hash = unescape(m[1]);
return function() {
var h = location.hash;
if( h == "") {
location.replace(location.href);
}
else {
var s = location.search;
s = s.replace(/[?&]__hash=[^&]+/,'');
s += (s == "" ? "?" : "&")+"__hash="+escape(h);
location.replace(location.pathname+s);
}
};
})();
假设服务器端没有任何东西使用
$\u GET[''u\u hash']
,这可以安全使用。window.location.reload(false);将从缓存中重新加载…@tgxanaheimx-注意“may”和“页面”的用法-它没有说任何关于“will”或链接文件的内容。啊,重点是。不是最好的,因为您是从“最佳实践”的角度而不是仅仅从“功能”的角度来处理它。。。