在WebView加载URL时添加时间戳可以防止缓存问题,以下是实现方法:
1.对于加载网页URL的情况:
- MainActivity.java
// ... existing code ...
String originalUrl = "https://example.com/page.html";
String urlWithTimestamp = originalUrl + (originalUrl.contains("?") ? "&" : "?") + "t=" + System.currentTimeMillis();
webView.loadUrl(urlWithTimestamp);
// ... existing code ...
2.对于加载本地HTML文件的情况:
MainActivity.java
// ... existing code ...
String filePath = "file:///android_asset/index.html";
String htmlContent = getHtmlContentFromAsset("index.html"); // 需要实现这个方法
htmlContent = injectTimestamp(htmlContent);
webView.loadDataWithBaseURL(filePath, htmlContent, "text/html", "UTF-8", null);
// ... existing code ...
3.辅助方法实现:
private String getHtmlContentFromAsset(String filename) {
try {
InputStream is = getAssets().open(filename);
byte[] buffer = new byte[is.available()];
is.read(buffer);
is.close();
return new String(buffer);
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
private String injectTimestamp(String html) {
return html.replace("</body>",
"<script>document.write('<input type=\"hidden\" name=\"t\" value=\"" +
System.currentTimeMillis() + "\">')</script></body>");
}
4.如果使用WebViewClient统一处理:
MainActivity.java
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(!url.contains("t=")) {
String newUrl = url + (url.contains("?") ? "&" : "?") + "t=" + System.currentTimeMillis();
view.loadUrl(newUrl);
return true;
}
return false;
}
});
注意事项:
- 时间戳参数名建议使用"t"或"timestamp"等简短名称
- 对于重要页面,建议将时间戳放在URL参数中(?t=xxx)
- 本地HTML注入的时间戳会在每次加载时变化