做微信公眾號和調試手機頁面的時候,避免不了頁面要跳轉到微信瀏覽器打開,調試階段,android版微信瀏覽器一直都默認緩存html靜態資源,每次靜態資源變化甚至新內容發布的時候在微信瀏覽器上都極有可能不能更新,很多時候要清理微信緩存才能看到效果,很是煩人。部分客戶裝了QQ瀏覽器,微信實際調用的是QQ瀏覽器,有時候甚至光清理微信緩存都無效,QQ瀏覽器的緩存也要清。
經過一番探索微信瀏覽器確實是在webview的上層做的緩存:就是如果請求過了這個地址,就會存在本地,之后不取線上了。
解決方案:
一、通過url參數避免html文件緩存
請求同一個頁面的時候,如果url后面的參數不一樣,則不會調用微信緩存中的html頁面,由此可以解決html頁面的緩存問題。例如加個版本號或時間戳
www.xxx.com/home.html?v=1.0
二、避免css和js的緩存
以上工作完成之后,我們解決了html的緩存問題,但是通過訪問nginx(或是其他工具)的日志發現,雖然帶上了不同的參數,html確實不會緩存了,但是卻沒有js和css文件的請求。
猜測在這里,微信發現我們所請求的js和css文件在他的緩存里面有了,所以就直接打開緩存中的文件返回給了頁面上。(所以這就坑爹了啊!!)
所以我們要在html文件的頭部(head)處加上一些meta:
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Expires" content="0" />
ps,網上很多答案都提供了添加在head處的meta,但是有的人說沒有用。目測是因為meta只能保障js和css等資源不會被緩存,但是無法保障html不被緩存。所以,要和url參數方法於meta方法一起使用,才能保障毫無側漏!