2012-12-24 12 views
5

Mam aplikację WebView, która ładuje zawartość dynamiczną i chcę, aby widok pozostał na obrotach urządzenia. Więc napisałem następujące wiersze kodu:Przywracanie stanu przeglądania stron internetowych zawierającego dynamicznie generowany kod HTML

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mWebView.saveState(outState); 
} 

iw moim 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; 
} 

Ale to skutecznie odświeża stronę. Chcę przekazać dynamicznie generowany kod HTML.

Zastanawiam się nad wyrzuceniem całego dokumentu HTML przez JavascriptInterface, przechowywanie go w outState, a następnie ponowne ustawienie go ponownie poprzez JavascriptInterface.

Czy to byłoby dobre podejście? Czy nie ma metody WebView, która pozwala mi uzyskać jej wewnętrzny HTML?

+0

Czy kiedykolwiek znalazłeś rozwiązanie, które zachowałoby zmienne javascript i jvascript? – Alexey

Odpowiedz

0

Moje obecne rozwiązanie ma następujący kod:

w moim kodu javascript:

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

w moim JavascriptInterface:

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

w onSaveInstance():

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

w onCreate():

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

To prawie działa. Ale mam z tym problemy. Wygląda na to, że loadData() nie interpretuje znaczników skryptu. (Moje funkcje js się psują.) I czuję, że to może być rozwiązane bardziej elegancko.

+0

It 2018; czy zapisywanie dynamicznie dodawanej treści w odsłonach nadal jest niemożliwe? :( – David

Powiązane problemy