We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
众所周知 history.back() 可以让浏览器返回上一个页面,确切的说浏览器是返回了上一个状态 。所有静态资源都会from cache, 不会从服务器重新请求,通过jsonp发出的接口也会被缓存,这会导致我们的页面不能及时更新。
history.back()
状态
from cache
jsonp
network请求是点击back以后的效果,从size中可以看出所有静态资源全部被cache, 包括红色部分的jsonp请求, from cache 说明浏览器使用了上一次缓存的资源,故页面如果依赖jsonp请求结果展示的信息不会被更新。
在用户列表,点击一个就诊人名字,前往修改页面改变姓名,再使用 history.back() 返回上一个界面,那么你看到的姓名不会被改变。
分析完问题的根源,其实这并不是浏览器的bug,反而是浏览器提升体验的优化。我们只要达到返回上一页不让jsonp不缓存即可。
在jsonp请求上加随机数 getList?r=Math.random()
getList?r=Math.random()
document.referrer
//显然可以解决问题,但是浏览器的历史记录将会有两次列表页面的记录,返回按钮需要点击两次才能返回到上上一个页面(在移动端体验很差) location.replace(document.referrer)
// 事实证明,这个完全行不通,但是网络上还大量贴了这样的代码,可能某些浏览器有效 history.back(); location.reload();
200 => from cache
ETag,Cache-Control,Expires
理论上明确设置了 ETag,Cache-Control,Expires 头的资源才会被from cache。 但是我们的jsonp请求肯定没有设置缓存头还是被缓存了,说明我们在操作浏览器history的时候,浏览器会扩大我们的缓存范围。几乎对上一个页面的所有资源做了缓存。
The text was updated successfully, but these errors were encountered:
赞👍
Sorry, something went wrong.
赞
不知道什么时候就栽到某一个基本知识点上,解惑了
牛的
No branches or pull requests
history.back() 返回页面不刷新
众所周知
history.back()
可以让浏览器返回上一个页面,确切的说浏览器是返回了上一个状态
。所有静态资源都会from cache
, 不会从服务器重新请求,通过jsonp
发出的接口也会被缓存,这会导致我们的页面不能及时更新。network请求是点击back以后的效果,从size中可以看出所有静态资源全部被cache, 包括红色部分的jsonp请求,
from cache
说明浏览器使用了上一次缓存的资源,故页面如果依赖jsonp请求结果展示的信息不会被更新。在用户列表,点击一个就诊人名字,前往修改页面改变姓名,再使用 history.back() 返回上一个界面,那么你看到的姓名不会被改变。
如何解决
分析完问题的根源,其实这并不是浏览器的bug,反而是浏览器提升体验的优化。我们只要达到返回上一页不让jsonp不缓存即可。
最佳实践
在jsonp请求上加随机数
getList?r=Math.random()
一些不那么优雅的解决方案
document.referrer
更近一步
浏览器什么时候
200 => from cache
ETag,Cache-Control,Expires
头的资源哪些资源会被
from cache
理论上明确设置了
ETag,Cache-Control,Expires
头的资源才会被from cache
。 但是我们的jsonp请求肯定没有设置缓存头还是被缓存了,说明我们在操作浏览器history的时候,浏览器会扩大我们的缓存范围。几乎对上一个页面的所有资源做了缓存。The text was updated successfully, but these errors were encountered: