Guardar datos desde un WebView

Necesito guardar los datos que muestro en WebView. He logrado que con el ahorro de todas mis solicitudes de URL que se realizan en WebViewClient y enviarlos al servicio de backend. Servicio de back-end más tarde hacer solicitudes para esos archivos.

El problema es que WebViewClient está ejecutando su propio ciclo y las respuestas no son visibles lo que me lleva a hacer dos solicitudes para cada recurso.

¿Hay alguna forma de obtener datos directamente en WebViewClient?

Aquí está la pieza del código actual, que está funcionando:

private class Client extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { plainText = //get plain text and save it webView.loadDataWithBaseURL(url, plainText, MIME_TYPE_TEXT_HTML, UTF_8_ENCODING, null); return true; } @SuppressWarnings("deprecation") @Override public synchronized WebResourceResponse shouldInterceptRequest(WebView view, String url) { // we need to make sure it does nothing in this one for >= lollipop as in lollipop the call goes through both methods if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { return interceptRequest(view, url, null); } return null; } @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { WebResourceResponse response = super.shouldInterceptRequest(view, request); final String url = request.getUrl().toString(); return interceptRequest(view, url, response); } private WebResourceResponse interceptRequest(WebView webView, String url, WebResourceResponse webResourceResponse) { addUrlToDownloadQueue(url); return webResourceResponse; } 

AddUrlToDownloadQueue (url); Está teniendo cuidado de que todas las urls se pasan al servicio que recuperar todas las fuentes.

¿Hay alguna forma de obtener datos en WebViewClient sin pasarlos al servicio de backend?

¿Ha leído esta pregunta anterior ?

En caso de que no son capaces de lograr su objetivo, hágamelo saber.

Estoy publicando otra respuesta porque esta respuesta es demasiado larga como para que se ajuste a un comentario.

Bueno, eso no es bueno para seguir esa pregunta si no controla la página web. De hecho, como se ha dicho en la guía para desarrolladores de Android: "Precaución: El uso de addJavascriptInterface () permite que JavaScript controle su aplicación de Android. Esto puede ser una característica muy útil o un peligroso problema de seguridad. O todo el HTML es proporcionado por una persona desconocida o un proceso), entonces un atacante puede incluir HTML que ejecute su código del lado del cliente y posiblemente cualquier código de la elección del atacante.

Para obtener datos en la página web puede utilizar webView.loadUrl ("javascript: document.getElementById (" example "). Value;");

Para obtener datos de la página web, intente consultar esta página.

¡Si usted necesita más ayuda póngase en contacto conmigo !!

Usted puede intentar esto, puede ser esto puede ayudarle.

 public class TestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.webview); final WebView webview = (WebView) findViewById(R.id.browser); webview.getSettings().setJavaScriptEnabled(true); webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer"); webview.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:window.HtmlViewer.showHTML" + "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); } }); webview.loadUrl("http://android-in-action.com/index.php?post/" + "Common-errors-and-bugs-and-how-to-solve-avoid-them"); } class MyJavaScriptInterface { private Context ctx; MyJavaScriptInterface(Context ctx) { this.ctx = ctx; } public void showHTML(String html) { new AlertDialog.Builder(ctx).setTitle("HTML").setMessage(html) .setPositiveButton(android.R.string.ok, null).setCancelable(false).create().show(); } } } 

Vea mi ejemplo para obtener datos antes de enviar:
https://github.com/henrychuangtw/WebView-Javascript-Inject

Y parar para pasar datos al backend, devolver false en función onsubmit

 webview1.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); StringBuilder sb = new StringBuilder(); sb.append("document.getElementsByTagName('form')[0].onsubmit = function () {"); sb.append("var objPWD, objAccount;var str = '';"); sb.append("var inputs = document.getElementsByTagName('input');"); sb.append("for (var i = 0; i < inputs.length; i++) {"); sb.append("if (inputs[i].type.toLowerCase() === 'password') {objPWD = inputs[i];}"); sb.append("else if (inputs[i].name.toLowerCase() === 'email') {objAccount = inputs[i];}"); sb.append("}"); sb.append("if (objAccount != null) {str += objAccount.value;}"); sb.append("if (objPWD != null) { str += ' , ' + objPWD.value;}"); sb.append("window.MYOBJECT.processHTML(str);"); sb.append("return true;"); //return false, to stop onsubmit function sb.append("};"); view.loadUrl("javascript:" + sb.toString()); } }); 
  • ¿Cómo puedo comprobar desde Android WebView si una página es una "página 404 no encontrada"?
  • Abrir enlace desde Webview de Android en el navegador normal como popup
  • Prevención de la autolinking de correos electrónicos y URLs en un WebView de Android
  • Cómo cargar un archivo js de los elementos en la vista web después de cargar html
  • Comprobar si Android WebView está consumiendo eventos táctiles
  • ¿Cuál es la diferencia al crear un objeto WebView de Android con ContextWrapper y Context?
  • Android WebView añadiendo extraño espacio vacío en la parte inferior
  • Cargar una div en una vista web en Android
  • Url abierta en pantalla completa en lugar de Webview
  • Modificar el título de la alerta () (Javascript en la vista Web de Android)
  • Javascript no funciona en una actividad de WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.