- 发布时间
微信小程序WebView在IOS中回退刷新问题
作者
Chad
缘起
在微信小程序 IOS 某些版本中(我遇到的是 17^)的 WebView 里,回退并不会触发重新渲染。无论是使用 pageshow 监听还是 effect,都没用。
捣鼓了各种方式后发现,嵌套 iframe 确实可以解决,但这样过于复杂,相当于嵌套了三层:微信 WebView => iframe => Project A => ProjectB,交互起来过于麻烦。
Solve
经过多次尝试,发现微信小程序在 iOS 特定系统中,back 会缓存当前页面,回退根本不会触发渲染。解决方式是直接在该项目的 Nginx 中配置 Cache-Control,指定浏览器 no-cache:
# Nginx Config
...
location /ProjectA {
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
add_header Expires 0;
}
...
Cache-Control "no-cache, no-store, must-revalidate";告诉浏览器不要缓存页面的副本,每次都需要向服务器重新请求内容add_header Pragma "no-cache";:Pragma是一个 HTTP/1.0 的遗留指令,旧版本浏览器特定指令,这里的含义是不要缓存页面。add_header Expires 0;值为0将过期时间设置为过去的时间,以确保浏览器立即将内容标记为过期,从而不会缓存页面。
Support
赞赏
如果这些内容对你有所帮助,欢迎赞赏支持。