【问题标题】:Caching the webpage in webview offline throws ERR_CACHE_MISS only in some websites仅在某些网站中,离线缓存 webview 中的网页会引发 ERR_CACHE_MISS
【发布时间】:2019-06-12 14:31:27
【问题描述】:

webview 中的 Android 缓存会为 some website(我的网站)抛出 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" />

在 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 和 Retrofit 离线缓存用于 json 响应,不适合 webview 中的网页渲染?在 webview 中缓存网站的任何其他方式?

【问题讨论】:

    标签: android caching webview


    【解决方案1】:

    您尝试加载的页面应该在页面顶部有基本的 Html 和元标记。在索引文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多