Vista web de Android después de que onJsAlert no responde a las tomas

He anulado el comportamiento onJsAlert de mi WebChromeClient como:

WebChromeClient wvcc = new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { //... return true; } } 

Mi aplicación maneja con éxito las alertas Js y suprime la alerta original. Sin embargo, después del evento de alerta, no puedo hacer clic en mis botones (en los elementos de lista de listview) en la página web en mi webview. Actualmente estoy usando jQuery móvil para construir mi web.

¿Hay algo más que deba saber?

3 Solutions collect form web for “Vista web de Android después de que onJsAlert no responde a las tomas”

Acabo de enfrentar el mismo problema. Quería generar un diálogo personalizado Android en lugar de la alerta, a esto es la solución final:

 myWebView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, final String url, String message, JsResult result) { AlertDialog.Builder builder = new AlertDialog.Builder( MainActivity.this); builder.setMessage(message) .setNeutralButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { arg0.dismiss(); } }).show(); result.cancel(); return true; } }); 

La clave es el result.cancel(); Y return true; , He probado en varias combinaciones, y el único que no disparó la alerta predeterminada JS Y no causó el problema de tacto fue esta combinación

También me enfrenté al problema similar (pero con onJsPrompt en mi caso) y la solución sugerida no funcionó para mí. Ya he tenido las llamadas a result.cancel()/result.confirm() y return true del manejador. La clave para la corrección se encontró en el código fuente de JsDialogHelper .

Esta fue la línea que vi para resolver mi problema:

 builder.setOnCancelListener(new CancelListener()); 

El código completo del manejador:

  @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { final EditText data = new EditText(view.getContext()); AlertDialog.Builder b = new AlertDialog.Builder(view.getContext()) .setTitle(view.getTitle()) .setView(data) .setMessage(message) .setOnCancelListener(new CancelListener(result)) // if this line is missing, WebView remains unresponsive after the dialog is shown and closed once .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.confirm(data.getText().toString()); } }) .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); b.show(); return true; } 

Donde CancelListener se puede definir como una clase de stub simple:

 private class CancelListener implements DialogInterface.OnCancelListener, DialogInterface.OnClickListener { CancelListener(JsResult result) { mResult = result; } private final JsResult mResult; @Override public void onCancel(DialogInterface dialog) { mResult.cancel(); } @Override public void onClick(DialogInterface dialog, int which) { mResult.cancel(); } } 

No estoy seguro de si se trata de un error en WebView, o es necesario tener siempre un listener de cancelación definido para mantener los diálogos de webview funcionando correctamente.

Usted debe llamar al método result.confirm (), mi solución es:

  public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { Log.i("MainActivity", "onJsAlert url=" + url + ";message=" + message); Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show(); result.confirm(); return true; } 
  • Jquery móvil - keydown keydown en dispositivos móviles
  • Android Bottom White Stripe al rellenar contenido Webview
  • ¿Por qué jQuery Mobile 1.1-rc1 utiliza un .gif para el icono de carga (de nuevo)?
  • cómo mostrar letras árabes correctamente en android usando phonegap?
  • PhoneGap + jQuery Mobile = tiempo de respuesta lento
  • ScrollTop no funciona en móviles Android
  • JQueryMobile: ¿existe data-transition = "slideback" o similar?
  • cómo encontrar el recuento de elementos de la lista visible en el filtro de búsqueda jQuery mobile
  • La aplicación Cordova no puede cargar ningún archivo en los recursos / www (sólo index.html)
  • jQuery evento de prensa de botón móvil lenta para procesar
  • ¿Cómo conectarse al servidor en la aplicación móvil?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.