2012-12-24 3 views
5

Ho un WebView nella mia applicazione che carica il contenuto dinamico e voglio che la vista rimanga attiva sulle rotazioni del dispositivo. Così ho scritto le seguenti righe di codice:Ripristino dello stato di webview che contiene HTML generato dinamicamente

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

e nel mio 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; 
} 

Ma questa ricarica in modo efficace la pagina. Voglio passare l'HTML generato dinamicamente.

Stavo pensando di pratiche di dumping dell'intero documento HTML attraverso un JavascriptInterface, riporlo nella Outstate, e quindi il ripristino di nuovo attraverso il JavascriptInterface.

Questo sarebbe un buon approccio? Non esiste un metodo di WebView che mi consente di ottenere il suo codice HTML interno?

+0

Hai mai trovato una soluzione che manterrebbe le variabili javascript e jvascript? – Alexey

risposta

0

mia soluzione attuale ha il seguente codice:

nel mio codice JavaScript:

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

nel mio 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"); 
     } 
} 

Funziona quasi. Ma ho qualche problema con questo. Sembra che loadData() non interpreti tag di script. (Le mie funzioni js si interrompono.) E sento che questo potrebbe essere risolto in modo più elegante.

+0

It 2018; sta salvando il contenuto aggiunto dinamicamente nelle visualizzazioni Web ancora impossibile? :( – David