仅将Webview离线缓存在某些网站中会引发ERR_CACHE_MISS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅将Webview离线缓存在某些网站中会引发ERR_CACHE_MISS相关的知识,希望对你有一定的参考价值。

webview中的android缓存会为某些网站(我的网站)抛出ERR_CACHE_MISS,即使在以[]插入适当的权限后也是如此)>

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

in manifest.xml

但是对于某些网站

https://stackoverflow.com),它不会抛出任何异常,并且在我使用以下代码时不会出现异常
WebView webView;
ConnectivityManager connectivityManager;
ProgressBar progressBar;
String appCachePath;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    webView = findViewById(R.id.webView);
    progressBar = findViewById(R.id.progressBar);
    webView.setWebChromeClient(new WebChromeClient(){
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            progressBar.setProgress(100);
            progressBar.setVisibility(View.VISIBLE);
            if(progressBar.getProgress()==100){
                progressBar.setVisibility(View.GONE);
            }
        }
    });


    webView.getSettings().setjavascriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
    webView.getSettings().setAppCachePath(appCachePath);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setAppCacheEnabled(true);
    webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    try {
        connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Activity.CONNECTIVITY_SERVICE);
        if(connectivityManager.getActiveNetworkInfo() == null || !connectivityManager.getActiveNetworkInfo().isConnected())
        {
            Log.i("err","CACHE OR NETWROK");
            webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);
            webView.loadUrl("https://stackoverflow.com");
        }
        else
        {
            Log.i("err","CONNECTED");
            appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
            webView.getSettings().setAppCachePath(appCachePath);
            webView.loadUrl("https://stackoverflow.com");
        }
    } catch (Exception e) {
        Log.i("err","ERROR"+e.toString());
        e.printStackTrace();
    }

}

[我已经看到Amazon,Flipkart,Instagram,Facebook android应用程序完美地缓存了脱机视图(脱机时重新打开我们的应用程序时,将检索到我们离开该应用程序的帖子)。

我认为OkHTTPClient and Retrofit

脱机缓存用于json响应,不适合在webview中进行网页渲染吗?还有其他方法可以在webview中缓存网站吗?

即使在以[[

答案
您要加载的页面应该在页面顶部具有基本的html和meta标签。在索引文件中。

以上是关于仅将Webview离线缓存在某些网站中会引发ERR_CACHE_MISS的主要内容,如果未能解决你的问题,请参考以下文章

Android WebView 未从缓存中加载第二页

在android中显示缓存的webview版本

Android 仅加载缓存不起作用。离线显示 WebView

Android上的react-native-webview无法使用ERR_ACCESS_DENIED加载保存在缓存目录中的本地文件[重复]

Fragment webView for Button(呼叫或拨号)[Android Studio]

如果没有连接,Android WebView 不会加载缓存的网站