Android(4.4+)WebView第二次加载未显示iframe页面内容

3

我正在尝试从本地存储中展示网页到Webview页面,当页面第一次加载时看起来很好,但是当我删除Webview并再次添加它时,它就会像图片上那样(对于4.4+,在之前的Android版本中只有黑屏):

enter image description here

每次使用应用程序上下文以编程方式添加webview,关闭缓存、cookie,并在on destroy中删除它。
这是我的代码:
    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");
}

请问还有什么其他尝试的方法吗 =)


你正在尝试加载视频吗? - Sush
不,一个框架是谷歌地图,一个是网页,另外两个是图片。 - Siarhei
你再次添加文本时,是通过URL加载它吗? - Sush
不好意思,我忘了提到,我是每次从本地文件加载它,就像 file://<path>/page.html。 - Siarhei
getActivity().getApplicationContext() 使用活动上下文并进行检查 - Sush
刚刚尝试了一下,不幸的是结果还是一样=( 我也在想关于WebView内存泄漏的问题,其中一个建议是使用应用程序上下文。 - Siarhei
1个回答

4
看起来
mWebView.pauseTimers();

将数据保存在某个静态变量中...这样,即使我销毁了webview并创建了新的,播放中的iframe也不会停止。 所以,我删除了这行代码,现在它可以正常工作。

使用此标志时要小心。

顺便说一下,猜想它可能与内存泄漏问题有关...但这是另外一个故事。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接