Red de conocimiento informático - Conocimiento informático - ¿Cómo configurar un cuadro de aviso emergente en WebView que admita funciones de recordatorio, confirmación y aviso de js?

¿Cómo configurar un cuadro de aviso emergente en WebView que admita funciones de recordatorio, confirmación y aviso de js?

Android WebView no admite cuadros de aviso emergentes de las funciones js alert(), confirm() y Prompt() de forma predeterminada. Incluso configurar setJavaScriptEnabled(true); Entonces, ¿cómo admite WebView estas tres funciones de js? Esto se puede lograr configurando el objeto WebChromeClient. WebChromeClient ayuda principalmente a WebView a procesar cuadros de diálogo de Javascript, íconos de sitios web, títulos de sitios web, progreso de carga, etc.

Los siguientes son tres métodos para anular WebChromeClient:

OnJsAlert: cuadro de advertencia (la advertencia en WebView no es válida y debe personalizarse para que aparezca WebChromeClient).

OnJsPrompt: cuadro de aviso.

OnJsConfirm: casilla Aceptar.

Las representaciones son las siguientes:

1. Alarma

2. Primero, echemos un vistazo al código de la página js:

& lthtml & gt

& lthead & gt

& ltmeta ejemplo de vista web. ;

Importar Android.app.activity;

Importar el cuadro de diálogo Android.app.alert;

Importar la interfaz Android.content.dialog;

Importar Android.bundle;

Importar Android.view.view;

Importar Android.WebKit.jsprompt resultado;

Importar Android.WebKit. js resultado;

p>

Importar Android . WebKit cliente;

Importar Android WebKit .

Importar Android.widget.edittext;

Importar Android.widget.textview;

/**

* Creado. por mChenys el 19/11/2015.

*/

La clase pública TestAlertActivity extiende la actividad {

@Override

Nulo protegido al crear (estado de instancia guardado del paquete){

super .oncreate(savedInstanceState);

WebView webView = new WebView(this);

setContentView(webView);

enfoque de solicitud de vista web. ();

configuración web = webview.get settings();

setjavascript enable(true); //Habilitar soporte js

// Configure la función Alert() para responder a js.

webview . setwebchromeclient(new WebChromeClient(){

@override

public boolean onJsAlert(vista WebView, URL de cadena, mensaje de cadena, resultado final de JsResult){

Constructor b = nuevo constructor AlertDialog(testalertactivity.this);

b.settitle("Alerta");

b.setMessage(message);

b.setPositiveButton(Android.R.string.ok, crea un nuevo DialogInterface.OnClickListener() {

@Override

public void onClick(diálogo de interfaz de diálogo, int cual) {

resultado.confirm().

}

});

b.setcancelable(false);

b.create().show();

Devuelve verdadero

}

//Establece la función Confirm() en respuesta a js.

@Override

public boolean onJsConfirm(vista WebView, URL de cadena, mensaje de cadena, resultado final de JsResult){

AlertDialog.Builder b = Nuevo AlertDialog.Builder(testalertactivity.this);

b.setTitle("Confirmar");

b. setMessage(mensaje);

b.setPositiveButton( Android.R.string.ok, crea un nuevo DialogInterface.OnClickListener() {

@Override

public void onClick (diálogo de interfaz de diálogo, int cual) {

resultado.confirm().

}

});

b.setNegativeButton (Android.R.string.cancel, nuevo DialogInterface.OnClickListener(). {

@Override

public void onClick(diálogo de interfaz de diálogo, int cual) {

resultado .

}

});

b.create(). show();

Devuelve verdadero

}

// Configure la función Prompt() para responder a js.

@Override

onJsPrompt booleano público (vista WebView, URL de cadena, mensaje de cadena, valor predeterminado de cadena, resultado final de jspromptsultresult) {

Vista final v = Ver. inflar(testalertactivity . this, R.layout.prompt_dialog, null);

((TextView)v . findviewbyid(r . id . Prompt_message_text)).

setText(mensaje);

((EditText)v . findviewbyid(r . id . solicitud _ entrada _ campo)). setText(predeterminado);

Cuadro de diálogo de alerta. generador b = nuevo diálogo de alerta. Constructor(testalertactivity.this);

b.setTitle("tip");

b.set view(v);

b.setPositiveButton( Android R.string.ok, nuevo OnClickListener() {

@override

public void onClick(diálogo de interfaz de diálogo, int cual) {

Valor de cadena =. ((EditText)v . findviewbyid(r . id . solicitud _ entrada _ campo)). getText()

ResultConfirm(valor

}

});

b.setNegativeButton(Android.R.string.cancel, new DialogInterface.OnClickListener() {

@Override

public void onClick( diálogo interfaz diálogo, int cual) {

resultado cancel();

}

});

p>

b. crear(). show();

Devuelve verdadero

}

});

webview loadurl(" file:///Android _. activo/índice 3. html ");

}

}

Hay dos cosas a tener en cuenta:

1. Importante para Al escribir el método onJsPrompt, necesitamos personalizar un archivo de diseño de aviso, como se muestra a continuación: Prompt_dialog.xml

Es solo un TextView de aviso y un EditTex de texto de entrada.

[html]Ver texto sin formato

& lt? versión xml = "1.0" codificación = "utf-8"? & gt

& ltLinearLayout xmlns:android= " "

Android:layout _ width = " match _ parent "

Android:layout _ height = " match _ parent "

Android:orientación = " vertical " & gt;

& lttext view

Android:id = " @+id/prompt _ mensaje _ text "

Android:layout _ width = " match _ parent "

Android:layout _ height = " wrap _ content "/& gt;

& ltEditar texto

Android:id = " @+id/prompt _ input _ field "

Android:layout _ width = " match _ parent "

Android :layout _ height = " wrap _ content "

android:minWidth="250dp "

android:selectAllOnFocus="true "

Android:desplazarse horizontalmente = " verdadero "/& gt;

& lt/diseño lineal & gt;

2. WebView necesita ser compatible con js, recuerde agregar compatibilidad con js.

configuración web = vista web .obtener configuración();

configuración setjavascript habilitada