强制使用 Javascript 在 Chrome 中重新加载页面 [无缓存]
Force a reload of page in Chrome using Javascript [no cache]
我需要使用 JavaScript 重新加载页面,并确保它不会从浏览器缓存中提取,而是从服务器重新加载页面。[由于页面的元素在此期间会发生变化]
在IE和FF上,我发现以下代码工作正常;
window.location.reload(true);
但是,它不适用于Chrome或Safari。
我尝试了以下方法,但也无济于事;
window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);
这个问题有解决方案吗?
发现
调查后,我发现这个问题是HTTP协议处理;
- Chrome 发送包含 HTTP 字段的请求
Pragma: no-cache
- 服务器使用
Last-Modified: DATE1
字段进行响应 - JS使用
location.reload(true)
强制从服务器而不是缓存重新加载 - Chrome 发送带有
If-Modified-Since: DATE1
字段的请求 - 服务器响应
HTTP Status 304 Not Modified
服务器应用程序有过错,因为没有注意到动态页面内容中的状态更改,因此没有返回200
。但是,Chrome/WebKit 是唯一在调用 JS location.reload(true)
时发送If-Modified-Since
字段的浏览器。
我想我会把我的发现放在这里,以防其他人遇到同样的问题。
您可以使用此技巧:
$.ajax({
url: window.location.href,
headers: {
"Pragma": "no-cache",
"Expires": -1,
"Cache-Control": "no-cache"
}
}).done(function () {
window.location.reload(true);
});
为了确保页面不会从缓存加载,您可以添加一些唯一编号进行查询:
window.location = location.href + '?upd=' + 123456;
您也可以使用日期代替123456
这是我为确保我的应用程序文件在 chrome 上强制重新加载而采取的措施:
var oAjax = new XMLHttpRequest;
oAjax.open( 'get', '/path/to/my/app.js' );
oAjax.setRequestHeader( 'Pragma', 'no-cache' );
oAjax.send();
oAjax.onreadystatechange = function() {
if( oAjax.readyState === 4 ) {
self.location.reload();
}
}
尝试window.location = window.location
很棒的发现!我刚刚遇到了同样的问题,这真的有很大帮助!但是,除了您的发现之外,Chrome似乎总是发送一个get请求来获取location.reload()...IE/FF 正在重复最后一个请求。
相关文章:
- 如何在从浏览缓存加载页面时执行javascript
- 使用jquery.load('pageName')方法时,未从应用程序缓存加载Html页
- ajax缓存false无法加载图像
- 是否可以在不将其添加到DOM的情况下预加载和缓存视频文件
- 使用HTML5缓存时无法加载外部资源
- 在正确的时间加载缓存的字体
- Kendo UI树视图中的延迟加载(带缓存)
- 如何强制从浏览器缓存重新加载当前页面
- 从缓存加载网页时未执行Javascript
- 如何在注销后从服务器重新加载angular应用程序,而不使用浏览器缓存
- 如何在从缓存加载路由后强制服务工作者从网络请求路由
- 预加载图像和缓存图像之间有区别吗
- 将部分视图加载到JQuery对话框中的缓存问题
- 如何使用JQuery缓存加载的html
- 如何正确注销GWT应用程序以避免浏览器加载缓存数据
- Firefox正在动态iframe中加载缓存
- Google Feed API -从RSS提要加载缓存结果
- 加载缓存页面时重置变量
- 如何在重定向到外部页面之前在jquery中预加载(缓存)它
- Chrome加载缓存的Javascript,尽管清除缓存,删除/重新安装,新的MAMP主机设置等