恢复webview状态,包含动态生成的HTML



我的应用程序中有一个加载动态内容的WebView,我希望视图在设备旋转时持久化。所以我写了以下几行代码:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    mWebView.saveState(outState);
} 
在我的onCreate()中:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        if(D.bug){
            Log.i(TAG, "Restoring browser state");
        }
        mWebView.restoreState(savedInstanceState);
    } else {
        if(D.bug){
            Log.i(TAG, "Not restoring browser state");
        }
        mWebView.loadUrl("file:///android_asset/html/browser_3col.html");
    }
    return mWebView;
}

但是这有效地重新加载了页面。我想传递动态生成的HTML。

我正在考虑通过JavascriptInterface转储整个文档HTML,将其存储在outState中,然后通过JavascriptInterface再次重置它。

这是一个好方法吗?有没有WebView的方法,让我得到它的内部HTML?

我目前的解决方案有以下代码:

在我的JavaScript代码:

window.JSInterface.dumpInnerHtml(document.documentElement.innerHTML);

in my JavascriptInterface:

@JavascriptInterface
public void dumpInnerHtml(String htmlDump) {
    if (!mBrowseFragment.isDetached()) {
        mBrowseFragment.updateWebviewHtml(htmlDump);
    } 
}

in onSaveInstance():

    super.onSaveInstanceState(outState);
    mWebView.saveState(outState);
    outState.putString(INSTANCE_CONTAINER_HTML, mCurrentHtmlDump);

in onCreate():

if (savedInstanceState != null) {
        mWebView.restoreState(savedInstanceState);
        String restoredHtml = savedInstanceState
                .getString(INSTANCE_HTML);
        if (restoredHtml != null) { 
            mWebView.loadData(restoredHtml, "text/html", "utf-8");
        }
}

它几乎工作。但是我有一些问题。似乎loadData()不解释脚本标签。(我的js函数中断),我觉得这可以更优雅地解决。

最新更新