location.reload 与缓存
Posted
技术标签:
【中文标题】location.reload 与缓存【英文标题】:location.reload with cache 【发布时间】:2012-07-14 04:43:49 【问题描述】:如果您对此问题有更好的标题,请随时编辑。
在很长一段时间里,我总是使用location.reload()
重新加载页面 - 这是最合乎逻辑的做法,对吧?
但我最近注意到它并不像我最初想象的那样等同于 F5,而更像是 Ctrl+F5。所有图像和其他链接文件都从服务器重新请求,而我只想重新加载页面。
我发现我可以使用location.replace(location.href)
,这似乎达到了我想要的效果:重新加载页面但从缓存中检索链接文件。
这是理想的吗?还有比这更好的方法吗?我是否忽略了这种方法可能存在的任何缺陷?
(注意:我已经通过将filemtime
附加为查询字符串来对链接文件(例如脚本)进行缓存清除管理)
【问题讨论】:
window.location.reload(false);将从缓存中重新加载... @TGxANAHEiiMx "If it is false or not specified, the browser may reload the page from its cache." - 请注意“可能”和“页面”的使用 - 它没有提及“将”或链接文件。 啊,重点。不是最好的,因为您是从“最佳实践”的角度来处理它,而不仅仅是“功能”的情况...... 【参考方案1】:在回答我自己的问题时,有一个很大的陷阱:当位置包含哈希时,浏览器将跳转到该哈希而不是重新加载页面。
我实现的解决方案如下:
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);
;
)();
假设服务器端没有使用$_GET['__hash']
,则可以安全使用。
【讨论】:
以上是关于location.reload 与缓存的主要内容,如果未能解决你的问题,请参考以下文章
带有清除缓存的 window.location.reload [重复]
loaction.reload(false)和location.reload(true)
loaction.reload(false)和location.reload(true)的区别