Restauración del estado de vista web que contiene HTML generado dinámicamente

Tengo un WebView en mi aplicación que carga contenido dinámico, y quiero que la vista persista en rotaciones de dispositivos. Así que escribí las siguientes líneas de código:

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

Y en mi 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; } 

Pero esto efectivamente recarga la página. Quiero pasar el HTML generado dinámicamente.

Estaba pensando en descargar todo el documento HTML a través de un JavascriptInterface , almacenarlo en el outState, y luego restablecerlo de nuevo a través de JavascriptInterface .

¿Sería esto un buen enfoque? ¿No hay ningún método de WebView que me permita obtener su HTML interno?

Mi solución actual tiene el código siguiente:

en mi código JavaScript:

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

en mi JavascriptInterface :

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

en onSaveInstance() :

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

en onCreate() :

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

Casi funciona. Pero tengo algunos problemas con él. Parece que loadData () no interpreta las etiquetas de script. (Mis funciones de js se rompen.), Y siento que esto podría resolverse con más elegancia.

  • Cómo restablecer completamente la vista web de Android antes de cargar la nueva solicitud
  • Asegurar las APIs de webservice RESTful de Spring de acceso no autorizado?
  • Surface - dequeueBuffer failed (Error desconocido 2147483646)
  • Cómo seleccionar una palabra en la vista web de Android?
  • Android - Javascript: cómo ejecutar jquery en webview
  • Conexión de cliente a servidor en aplicaciones de chat como Viber o Telegram
  • ¿Qué es un servicio web en android?
  • Android y su lenta webview. Hardware acelerado es buggy
  • ¿Cómo puedo inhabilitar todos los eventos táctiles en todos los niños de un ViewGroup?
  • Android Fragmento WebView
  • Consumir servicio REST Web y analizar datos XML en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.