WebChromeClient
如果您想从 JavaScriptalert
函数显示消息框,则不需要使用它。您可以在 JavaScript 代码和客户端 Android 代码之间创建接口。
在下面的示例中,您的 JavaScript 代码可以调用 Android 代码中的方法来显示Dialog
,而不是使用 JavaScript 的alert()
函数。我发现这是显示警报的最方便且受广泛支持的方式。
在您的 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;
}
}
接下来,将类绑定到在您的withWebAppInterface
中运行的 JavaScript并命名接口:WebView
addJavascriptInterface()
Android
WebView mWebView = (WebView) findViewById(R.id.webview);
mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
这将创建一个调用Android
JavaScript 的接口,该接口在WebView
. 此时,您的 Web 应用程序可以访问 WebAppInterface
该类。下面是一些 HTML 和 JavaScript,它们在用户单击按钮时使用新界面创建一个消息框:
<input type="button" value="Alert!" onClick="javascript:Android.androidAlert('It works!');" />
在单击按钮时,该Android
接口用于调用该 WebAppInterface.androidAlert()
方法。
一点警告:使用addJavascriptInterface()
允许 JavaScript 控制您的 Android 应用程序。这可能是一个非常有用的功能,也可能是一个危险的安全问题。因此,addJavascriptInterface()
除非您编写了所有出现在WebView
.