我的一个活动中有一个WebView,当它加载一个网页时,该页面从Facebook收集了一些背景数据.
我所看到的是,每次打开和刷新应用程序时,应用程序中显示的页面都是相同的.
我已经尝试将WebView设置为不使用缓存并清除WebView的缓存和历史记录.
我也遵循了这里的建议:如何为WebView清空缓存?
但这一切都不起作用,有没有人有任何想法我可以克服这个问题,因为它是我的应用程序的重要部分.
mWebView.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView view, int progress)
{
if(progress >= 100)
{
mProgressBar.setVisibility(ProgressBar.INVISIBLE);
}
else
{
mProgressBar.setVisibility(ProgressBar.VISIBLE);
}
}
});
mWebView.setWebViewClient(new SignInFBWebViewClient(mUIHandler));
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.clearHistory();
mWebView.clearFormData();
mWebView.clearCache(true);
WebSettings webSettings = mWebView.getSettings();
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
Time time = new Time();
time.setToNow();
mWebView.loadUrl(mSocialProxy.getSignInURL()+"?time="+time.format("%Y%m%d%H%M%S"));
Run Code Online (Sandbox Code Playgroud)
所以我实现了第一个建议(尽管改变了代码是递归的)
private void clearApplicationCache()
{
File dir = getCacheDir();
if(dir!= null && dir.isDirectory())
{
try
{
ArrayList<File> stack = new ArrayList<File>();
// Initialise the list
File[] children = dir.listFiles();
for(File child:children)
{
stack.add(child);
} …Run Code Online (Sandbox Code Playgroud) 上下文
目前正在开发HTML&JS重型项目,这是一个反应原生项目.所有HTML和JS都在本地引用(没有超过http).
问题
每当我对HTML或JS进行更改时,我都看不到更改(刷新本机代码或只是再次运行它),因此我不得不完全卸载应用程序.
题
有没有办法忽略这些文件的缓存版本(假设存在缓存机制)
我没有找到关于这个主题的任何有效资源,所以任何反馈都将非常感谢,谢谢.
我在查看 Android WebView 文档时遇到了ServiceWorkerController,并决定尝试一下。不幸的是我无法拦截任何电话。我知道WebViewClient.shouldInterceptRequest但有兴趣了解有关 ServiceWorkerController 的更多信息。不幸的是,这些文档比我下面已经实现的内容有点稀疏。任何帮助,将不胜感激。
我已经组装了一个由单个 Activity 组成的简单应用程序。
package com.example.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.ServiceWorkerClient;
import android.webkit.ServiceWorkerController;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
private final static String LOGTAG = MainActivity.class.getSimpleName();
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ServiceWorkerController.getInstance().setServiceWorkerClient(new ServiceWorkerClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebResourceRequest request) {
Log.e(LOGTAG, "in service worker");
return null;
}
});
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.activity_main_webview); …Run Code Online (Sandbox Code Playgroud)