以下是重寫WebChromeClient的三種方法:
OnJsAlert:警告框(WebView上的警告無效,需要自定義WebChromeClient才能彈出)。
OnJsPrompt:提示框。
OnJsConfirm: OK框。
效果圖如下:
1.警報
2.提示
3.確認
我們先來看看js頁面代碼:
& lthtml & gt
& lthead & gt
& ltmeta . example . chenys . webview demo;
導入Android . app . activity;
導入Android . app . alert dialog;
導入Android . content . dialog interface;
導入Android . OS . bundle;
導入Android . view . view;
導入Android . WebKit . jsprompt result;
導入Android . WebKit . js result;
導入Android . WebKit . web chrome client;
導入Android . WebKit . web settings;
導入Android . WebKit . webview;
導入Android . widget . edittext;
導入Android . widget . textview;
/**
*由mChenys於2015/11/19創建。
*/
公共類TestAlertActivity擴展Activity {
@覆蓋
受保護的void onCreate(Bundle saved instancestate){
super . oncreate(savedInstanceState);
WebView webView = new WebView(這個);
setContentView(webView);
webview . request focus();
web settings settings = webview . get settings();
settings . setjavascript enabled(true);//啟用js支持
//設置Alert()函數響應js。
webview . setwebchromeclient(new WebChromeClient(){
@覆蓋
public boolean onJsAlert(WebView視圖,字符串url,字符串消息,最終JsResult結果){
警報對話框。生成器b =新警報對話框。構建器(testalertactivity . this);
b . settitle(" Alert ");
b.setMessage(消息);
b.setPositiveButton(安卓。R.string.ok,新建DialogInterface。OnClickListener() {
@覆蓋
public void onClick(dialog interface dialog,int which) {
result.confirm()。
}
});
b . setcancelable(false);
b.create()。show();
返回true
}
//設置響應js的Confirm()函數。
@覆蓋
public boolean onJsConfirm(WebView視圖,字符串url,字符串消息,最終JsResult結果){
警報對話框。生成器b =新警報對話框。構建器(testalertactivity . this);
b.setTitle(“確認”);
b.setMessage(消息);
b.setPositiveButton(安卓。R.string.ok,新建DialogInterface。OnClickListener() {
@覆蓋
public void onClick(dialog interface dialog,int which) {
result.confirm()。
}
});
b.setNegativeButton(安卓。R.string.cancel,new DialogInterface。OnClickListener() {
@覆蓋
public void onClick(dialog interface dialog,int which) {
result . cancel();
}
});
b.create()。show();
返回true
}
//設置Prompt()函數響應js。
@覆蓋
public boolean onJsPrompt(WebView視圖,字符串url,字符串消息,字符串defaultValue,最終jspromptsultresult結果){
最終視圖v = View . inflate(testalertactivity . this,R.layout.prompt_dialog,null);
((TextView)v . findviewbyid(r . id . prompt _ message _ text))。setText(消息);
((EditText)v . findviewbyid(r . id . prompt _ input _ field))。setText(默認值);
警報對話框。生成器b =新警報對話框。構建器(testalertactivity . this);
b.setTitle(“提示”);
b . set view(v);
b.setPositiveButton(安卓。R.string.ok,新建DialogInterface。OnClickListener() {
@覆蓋
public void onClick(dialog interface dialog,int which) {
字符串值=((EditText)v . findviewbyid(r . id . prompt _ input _ field))。getText()。toString();
結果確認(值);
}
});
b.setNegativeButton(安卓。R.string.cancel,new DialogInterface。OnClickListener() {
@覆蓋
public void onClick(dialog interface dialog,int which) {
result . cancel();
}
});
b.create()。show();
返回true
}
});
webview . loadurl(" file:///Android _ asset/index 3 . html ");
}
}
有兩件事需要註意:
1.要重寫onJsPrompt方法,我們需要定制壹個提示布局文件,如下所示:prompt_dialog.xml
只是壹個提示TextView和壹個輸入文本EditTex。
[html]查看純文本
& lt?xml版本="1.0 "編碼="utf-8 "?& gt
& ltLinearLayout xmlns:android= " "
Android:layout _ width = " match _ parent "
Android:layout _ height = " match _ parent "
Android:orientation = " vertical " & gt;
& lt文本視圖
Android:id = " @+id/prompt _ message _ text "
Android:layout _ width = " match _ parent "
Android:layout _ height = " wrap _ content "/& gt;
& lt編輯文本
Android:id = " @+id/prompt _ input _ field "
Android:layout _ width = " match _ parent "
Android:layout _ height = " wrap _ content "
android:minWidth="250dp "
android:selectAllOnFocus="true "
Android:scroll horizontally = " true "/& gt;
& lt/linear layout & gt;
2.如果2。WebView需要支持js,記得加js支持。
web settings settings = webview . get settings();
settings . setjavascript enabled(true);