En mi aplicación que estoy usando WebViewy en que estoy usando el JavaScript alert( )método pero no funciona, no aparece ninguna ventana emergente.
en mi archivo de manifiesto he agregado
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
y en el archivo de actividad he agregado
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("file:///android_asset/demo.html");
En el archivo de diseño xml que he agregado
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
Cualquier idea de cómo habilitar completa JavaScripten WebView?
Actualizar
Gracias, marque
el alert()método en el htmlarchivo que está funcionando ahora :).
Ahora hay dos problemas en WebView:
1: Estoy usando un <textarea>en el archivo html en el que estoy cargando WebViewe intento escribir en la fuente del idioma hindi, pero cuando trato de escribir texto en hindi, se muestra como símbolos (símbolos rectangulares como []).
cuando hago lo mismo en el navegador Firefox en el escritorio, funciona bien. ¿Alguna idea de cómo dar soporte para múltiples idiomas textareaen WebView?
2: Cuando hago clic en enviar e intento abrir el valor del texto en el alert()método en otro script java, no funciona, ¿significa que incluso después de usar WebChromeClient
su aplicable solo para la página html cargada actual y no se javascriptsllama desde esa página?
fuente

Respuestas:
Consulte este enlace y el último comentario que debe utilizar
WebChromeClientpara su propósito.fuente
webview.getSettings().setJavaScriptEnabled(true);Como otros indicaron, es necesario configurar WebChromeClient para comenzar
alert()a trabajar. Es suficiente establecer el WebChromeClient () predeterminado:mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setWebChromeClient(new WebChromeClient());Gracias por todos los comentarios a continuación. Incluyendo a John Smith, quien indicó que necesitaba habilitar JavaScript.
fuente
mWebView.getSettings().setJavaScriptEnabled(true);antes de la líneamWebView.setWebChromeClient(new WebChromeClient());webview.getSettings().setJavaScriptEnabled(true);webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } });fuente
promptdesde javascript, en lugar de mostrar el texto del mensaje, dice: "La página en https: // ... dice:", rompiendo totalmente la inmersión de WebView que se incrusta en la aplicaciónEl siguiente código funcionará:
private WebView mWebView; final Activity activity = this; // private Button b; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setDomStorageEnabled(true); mWebView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { activity.setProgress(progress * 1000); } }); mWebView.loadUrl("file:///android_asset/raw/NewFile1.html"); }fuente
Puedes probar con esto, funcionó para mí
WebView wb_previewSurvey=new WebView(this); wb_previewSurvey.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { //Required functionality here return super.onJsAlert(view, url, message, result); } });fuente
si desea ocultar la URL al usuario, muestre un AlertDialog como se muestra a continuación.
myWebView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { Log.d(TAG, "onJsAlert url: " + url + "; message: " + message); AlertDialog.Builder builder = new AlertDialog.Builder( mContext); builder.setMessage(message) .setNeutralButton("OK", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int arg1) { dialog.dismiss(); } }).show(); result.cancel(); return true; } }fuente