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 に答える