【问题标题】:Android(4.4+) WebView not showing iframe page content second time loadAndroid(4.4+) WebView 不显示 iframe 页面内容第二次加载
【发布时间】:2016-09-14 17:54:20
【问题描述】:

我想从本地存储中显示在 webview 页面中,第一次加载页面时看起来不错,但是当我删除 webview 并再次添加它时,它看起来像在图片上(对于 4.4+,在以前的 android 版本上只是黑屏):

webview 每次添加程序(使用应用程序上下文),关闭缓存,cookie,并在销毁时将其删除。

这是我的代码:

    mLayout = (LinearLayout)  view.findViewById(R.id.linear_main); 
    mWebView = new WebView(getActivity().getApplicationContext());  
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setSaveFormData(false);  
    mWebView.setInitialScale(1); 
    mWebView.getSettings().setLoadWithOverviewMode(true);  
    mWebView.getSettings().setUseWideViewPort(true);   
    mWebView.getSettings().setAppCacheEnabled(false);
    mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
    mWebView.getSettings().setDatabaseEnabled(false);
    mWebView.getSettings().setDomStorageEnabled(false);
    mWebView.getSettings().setGeolocationEnabled(false);
    mWebView.getSettings().setSaveFormData(false);
    mWebView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,  
            LayoutParams.MATCH_PARENT));
    mWebView.setWebChromeClient(new WebChromeClient());

    if (Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) {
        mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
    }

    mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
    mWebView.getSettings().setPluginState(WebSettings.PluginState.ON_DEMAND); 

    mLayout.addView(mWebView,0);  


    /// then display page by call
    public void display(String path){ 

    Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
        noCacheHeaders.put("Pragma", "no-cache");
        noCacheHeaders.put("Cache-Control", "no-cache");
    mWebView.loadUrl(path, noCacheHeaders);

}

    /// after display destroy fragment  with the WebView 
@Override
public void onDestroy() { 
    super.onDestroy();
    CookieSyncManager.createInstance(getActivity().getApplicationContext());         
    CookieManager cookieManager = CookieManager.getInstance();         
    cookieManager.removeAllCookie();
    mWebView.removeAllViews(); 
    mWebView.destroyDrawingCache();
    mWebView.clearDisappearingChildren();
    mWebView.clearFormData();
    mWebView.clearHistory();
    mWebView.clearCache(true);    
    mWebView.loadUrl("about:blank");
    mWebView.pauseTimers();

    mLayout.removeAllViews();

    mWebView.destroy(); 
    mWebView = null;
    getActivity().getApplicationContext().deleteDatabase("webview.db");
    getActivity().getApplicationContext().deleteDatabase("webviewCache.db");
}

您能否建议我还需要尝试什么=)

【问题讨论】:

  • 正在尝试加载视频?
  • 不,一帧谷歌地图,一帧网页,两帧图片
  • 再添加一次你是用url加载吗?
  • 不,忘了说,我是从本地文件(每次)加载它,比如 file:///page.html
  • getActivity().getApplicationContext() 使用活动上下文并检查

标签: java android iframe cookies webview


【解决方案1】:

看起来

mWebView.pauseTimers();

将数据保存在一些 static 变量中...所以,我销毁 webview 并创建新的并不重要,播放 iframe 已停止。 所以,我已经删除了这条线,它现在可以工作了

使用这个标志要小心

顺便说一句,猜测可能与内存泄漏问题有关.. 但这是另一回事

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    相关资源
    最近更新 更多