Как показать диалоговое окно предупреждения Android в Webview?

Я разрабатываю приложение с веб-просмотром, но я не знаю, как включить JavaScript для отображения диалогового окна предупреждения в webview.

Я когда-либо пробовал это, но это не работает для меня. Во-первых, я создал объект webview и websettings, затем задал следующие параметры.

webSettings.setJavaScriptEnabled(true); webSettings.setBuiltInZoomControls(true); mWebView.requestFocusFromTouch(); 

В соответствии с вашим кодом я думал, что вы не устанавливаете следующие настройки Webviewclient и Webcromeclient, чтобы включить Javascript в Webview.

  mWebView.setWebViewClient(new WebViewClient()); mWebView.setWebChromeClient(new WebChromeClient()); 

Затем вы загружаете страницу Html со следующим кодом.

  mWebView.loadUrl("file:///android_asset/"+Your_Html_Page); 

И это часть HTML в вашем веб-обзоре.

 <!DOCTYPE html> <html> <head> <script> function myFunction() { alert("Hello! I am an alert box!"); } </script> </head> <body> <input type="button" onclick="myFunction()" value="Show alert box" /> </body> </html> 

Попробуйте, это может быть полезно.

Не обязательно использовать WebChromeClient если вы хотите отображать окно сообщения из функции alert JavaScript. Вы можете создавать интерфейсы между вашим кодом JavaScript и клиентским кодом Android .

В приведенном ниже примере ваш код JavaScript может вызвать метод в вашем Android-коде, чтобы отобразить Dialog , вместо использования функции alert() JavaScript. Я обнаружил, что это самый удобный и широко поддерживаемый способ отображения предупреждений.

Включите в приложение Android следующие классы:

Файл: WebAppInterface.java

 import android.content.Context; import android.webkit.JavascriptInterface; public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** Show a Message box from the web page */ @JavascriptInterface public void androidAlert(String message) { DialogBox dbx = new DialogBox(); dbx.dialogBox(message, "I get it", "",mContext); } } 

Файл: DialogBox.java

 import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; public class DialogBox { public boolean dialogBox(String msg, String okButton, String cancelButton, final Context activity) { Dialog v = null; AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity); alertDialogBuilder.setMessage(msg); if (okButton != "") { alertDialogBuilder.setPositiveButton(okButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { /**/ } }); } if (cancelButton != "") { alertDialogBuilder.setNegativeButton(cancelButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { /**/ } }); } AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); return true; } } для import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; public class DialogBox { public boolean dialogBox(String msg, String okButton, String cancelButton, final Context activity) { Dialog v = null; AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity); alertDialogBuilder.setMessage(msg); if (okButton != "") { alertDialogBuilder.setPositiveButton(okButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { /**/ } }); } if (cancelButton != "") { alertDialogBuilder.setNegativeButton(cancelButton, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { /**/ } }); } AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); return true; } } 

Затем привяжите класс WebAppInterface к JavaScript, который работает в вашем WebView с помощью addJavascriptInterface() и назовите интерфейс Android :

 WebView mWebView = (WebView) findViewById(R.id.webview); mWebView.addJavascriptInterface(new WebAppInterface(this), "Android"); 

Это создает интерфейс Android для JavaScript, запущенный в WebView . На этом этапе ваше веб-приложение имеет доступ к классу WebAppInterface . Ниже приведен HTML и JavaScript, которые создают окно сообщения, используя новый интерфейс, когда пользователь нажимает кнопку:

 <input type="button" value="Alert!" onClick="javascript:Android.androidAlert('It works!');" /> 

При нажатии кнопки интерфейс Android используется для вызова WebAppInterface.androidAlert() .

Немного предупреждения: Использование addJavascriptInterface() позволяет JavaScript управлять вашим Android-приложением. Это может быть очень полезной функцией или опасной проблемой безопасности . Таким образом, вы не должны использовать addJavascriptInterface() если вы не написали все HTML и JavaScript, которые отображаются в вашем WebView .

Попробуйте этот код:

 public OnClickListener imageButtonViewOnClickListener = new OnClickListener() { public void onClick(View v) { LayoutInflater inflater = LayoutInflater.from(MyActivity.this); // error here View alertDialogView = inflater.inflate(R.layout.alert_dialog_layout, null); WebView myWebView = (WebView) findViewById(R.id.DialogWebView); myWebView.loadData(webContent, "text/html", "utf-8"); AlertDialog.Builder builder = new AlertDialog.Builder(MyActivity.this); builder.setView(alertDialogView); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }).show(); } }; 

XML:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <WebView android:id="@+id/DialogWebView" android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_marginLeft="20dip" android:layout_marginRight="20dip" android:textAppearance="?android:attr/textAppearanceMedium" /> 

Если вы хотите показать собственный AlertDialog из события в WebView, тогда это то, что ищет поисковый код JavaScript для кода Android .

Пример кода доступен по этой ссылке .. Пример там показывает Toast .. может показать AlertDialog insted.

Intereting Posts
Android: развернуть / свернуть анимацию Java – if (Float.isNaN (x)) Стандартная Android-кнопка с другим цветом Проблема с несколькими асинхронными задачами на Android Spinner Получил эту ошибку с помощью retrofit2 & OkHttp3. Не удалось разрешить хост «<имя-хоста>»: нет адреса, связанного с именем хоста В чем разница между Контекстом и Активностью? Есть ли графическое представление жизненного цикла Android views (диаграмма состояния)? Android, как изменить интервал TimerTask после shcedule? CONNECTIVITY_CHANGE устарела в целях Android N Как встраивать объекты при построении JSON с помощью JSONObject Android Google Play, произошла фатальная ошибка разработчика. Проверьте журналы для получения дополнительной информации Файл R.java не обновляется с идентификатором элемента интерфейса Eclipse не может найти мое устройство Android 4.1.2 Отключить прокрутку ListView, содержащегося в ScrollView Что это означает «если устройство подключено к GCM»