En mi aplicación que estoy usando WebView
y 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 JavaScript
en WebView
?
Actualizar
Gracias, marque
el alert()
método en el html
archivo que está funcionando ahora :).
Ahora hay dos problemas en WebView
:
1: Estoy usando un <textarea>
en el archivo html en el que estoy cargando WebView
e 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 textarea
en 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 javascripts
llama desde esa página?
fuente
Respuestas:
Consulte este enlace y el último comentario que debe utilizar
WebChromeClient
para 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
prompt
desde 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