5

我的应用程序中有一个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。

我正在考虑通过 . 转储整个文档 HTML JavascriptInterface,将其存储在 outState 中,然后通过JavascriptInterface.

这是一个好方法吗?没有任何方法WebView可以让我获得它的内部 HTML 吗?

4

1 回答 1

0

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

在我的 JavaScript 代码中:

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

在我的JavascriptInterface

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

onSaveInstance()

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

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 函数坏了。),我觉得这可以更优雅地解决。

于 2012-12-24T23:07:27.137 回答