android - studio - ¿Cómo manejar un diálogo de confirmación de webview?
mensajes personalizados android studio (2)
Estoy mostrando una página web en una vista web y en la página web, hay un botón. Cuando hace clic en el botón, se supone que aparece un cuadro de diálogo de confirmación, pero no aparece en mi vista web. Aparece una ventana emergente si voy a la misma página web en el navegador de Android. ¿Alguien sabe cómo manejar los diálogos emergentes que vienen de una página web dentro de su WebView?
Gracias Brockoli por el método. Necesitaba esto para Xamarin.Android
public class MyWebChromeClient : WebChromeClient
{
private Context mContext;
private JsResult res;
public MyWebChromeClient(Context context)
{
mContext = context;
}
public override bool OnJsConfirm(WebView view, string url, string message, JsResult result)
{
res = result;
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.SetTitle("Confirm:");
builder.SetMessage(message);
builder.SetPositiveButton(Android.Resource.String.Ok, OkAction);
builder.SetNegativeButton(Android.Resource.String.Cancel, CancelAction);
builder.Create();
builder.Show();
return true;
//return base.OnJsConfirm(view, url, message, result);
}
private void CancelAction(object sender, DialogClickEventArgs e)
{
res.Cancel();
}
private void OkAction(object sender, DialogClickEventArgs e)
{
res.Confirm();
}
}
Esto de nuevo en la actividad donde se crea webview (web_view)
web_view.SetWebChromeClient(new MyWebChromeClient(this));
Ok, encontré la respuesta y aquí está!
Para manejar una confirmación emergente proveniente de una página web en su WebView, debe anular el método onJsConfirm en WebChromeClient para mostrar la ventana emergente como un diálogo de alerta de Android. Aquí está el código para hacerlo.
final Context myApp = this;
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
new AlertDialog.Builder(myApp)
.setTitle("App Titler")
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
result.confirm();
}
})
.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
result.cancel();
}
})
.create()
.show();
return true;
}
}
No olvides configurar tu WebChromeClient en tu WebView ...
mWebView.setWebChromeClient(new MyWebChromeClient());
Nota: este no es mi código, pero lo encontré y funciona perfectamente para manejar los diálogos de confirmación de javascript en una vista web.
¡Aclamaciones!