在Android的webview中定製js的alert,confirm和prompt對話方塊的方法
1.首先繼承android.webkit.WebChromeClient實現MyWebChromeClient。
2.在MyWebChromeClient.java中覆蓋onJsAlert,onJsConfirm,onJsPrompt三個方法。
3.在初始化Webview時設定呼叫webview.setWebChromeClient(new MyWebChromeClient());
4.在Webview載入的html中使用window.alert,window.confirm,window.prompt方法,系統彈出的將是自定義實現的對應對話方塊。
2.在MyWebChromeClient.java中覆蓋onJsAlert,onJsConfirm,onJsPrompt三個方法。
3.在初始化Webview時設定呼叫webview.setWebChromeClient(new MyWebChromeClient());
4.在Webview載入的html中使用window.alert,window.confirm,window.prompt方法,系統彈出的將是自定義實現的對應對話方塊。
MyWebChromeClient.java的程式碼如下:
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnKeyListener;
import android.graphics.Bitmap;
import android.os.Message;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.EditText;
/**
* http://618119.com/archives/2010/12/20/199.html
*/
//****************************************************************************
public class MyWebChromeClient extends WebChromeClient {
@Override
public void onCloseWindow(WebView window) {
super.onCloseWindow(window);
}
@Override
public boolean onCreateWindow(WebView view, boolean dialog,
boolean userGesture, Message resultMsg) {
return super.onCreateWindow(view, dialog, userGesture, resultMsg);
}
/**
* 覆蓋預設的window.alert展示介面,避免title裡顯示為“:來自file:////”
*/
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("對話方塊")
.setMessage(message)
.setPositiveButton("確定", null);
// 不需要繫結按鍵事件
// 遮蔽keycode等於84之類的按鍵
builder.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.v("onJsAlert", "keyCode==" + keyCode + "event="+ event);
return true;
}
});
// 禁止響應按back鍵的事件
builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
result.confirm();// 因為沒有繫結事件,需要強行confirm,否則頁面會變黑顯示不了內容。
return true;
// return super.onJsAlert(view, url, message, result);
}
public boolean onJsBeforeUnload(WebView view, String url,
String message, JsResult result) {
return super.onJsBeforeUnload(view, url, message, result);
}
/**
* 覆蓋預設的window.confirm展示介面,避免title裡顯示為“:來自file:////”
*/
public boolean onJsConfirm(WebView view, String url, String message,
final JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("對話方塊")
.setMessage(message)
.setPositiveButton("確定",new OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
result.confirm();
}
})
.setNeutralButton("取消", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
result.cancel();
}
});
// 遮蔽keycode等於84之類的按鍵,避免按鍵後導致對話方塊訊息而頁面無法再彈出對話方塊的問題
builder.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.v("onJsConfirm", "keyCode==" + keyCode + "event="+ event);
return true;
}
});
// 禁止響應按back鍵的事件
// builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
return true;
// return super.onJsConfirm(view, url, message, result);
}
/**
* 覆蓋預設的window.prompt展示介面,避免title裡顯示為“:來自file:////”
* window.prompt('請輸入您的域名地址', '618119.com');
*/
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, final JsPromptResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("對話方塊").setMessage(message);
final EditText et = new EditText(view.getContext());
et.setSingleLine();
et.setText(defaultValue);
builder.setView(et)
.setPositiveButton("確定", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.confirm(et.getText().toString());
}
})
.setNeutralButton("取消", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
// 遮蔽keycode等於84之類的按鍵,避免按鍵後導致對話方塊訊息而頁面無法再彈出對話方塊的問題
builder.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.v("onJsPrompt", "keyCode==" + keyCode + "event="+ event);
return true;
}
});
// 禁止響應按back鍵的事件
// builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
return true;
// return super.onJsPrompt(view, url, message, defaultValue,
// result);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
@Override
public void onRequestFocus(WebView view) {
super.onRequestFocus(view);
}
}
轉自:http://gundumw100.iteye.com/blog/1158719
相關文章
- Chrome 對於 JavaScript 對話方塊的新策略 —— 建議不要使用 alert(), confirm(), 和 prompt()ChromeJavaScript
- Delphi中點選網頁彈出的Alert對話方塊的確定按鈕網頁
- android漂亮的對話方塊專案sweet-alert-dialogAndroid
- c#中的模態對話方塊和非模態對話方塊C#
- TWebBrowser禁止彈出Alert對話方塊Web
- React中的模式對話方塊React模式
- javascript中的彈出對話方塊JavaScript
- 對話方塊背景色的設定 (轉)
- Android 中的特殊攻擊面(一)——邪惡的對話方塊Android
- JavaScript入門(4)確認(confirm訊息對話方塊)JavaScript
- android 多項對話方塊Android
- Android Dialog對話方塊Android
- 對話方塊中對成批控制元件的操作 (轉)控制元件
- 在 Flutter 使用 GetX 對話方塊Flutter
- 美化js系統函式alert,confirm,prompt,並實現lightbox效果JS函式
- word中打不開“特殊符號”對話方塊的解決方法符號
- js在Android的WebView中parseInt轉換不正確解決方法JSAndroidWebView
- Java 中彈出對話方塊的幾種方式Java
- android常用對話方塊封裝Android封裝
- [MFC]選擇目錄對話方塊和選擇檔案對話方塊
- 一個Flex 對話方塊的坑Flex
- 建造者模式打造隨心所欲的Android對話方塊模式Android
- Android——最全的系統對話方塊(AlertDialog)詳解Android
- Android AlterDialog 常用對話方塊使用方法詳解Android
- 視窗和對話方塊居中對齊
- Android對話方塊Dialog深度剖析Android
- Android 對話方塊 Dialog 深度剖析Android
- Android通知之普通對話方塊通知Android
- Android通知之列表對話方塊通知Android
- Android通知之多選對話方塊通知Android
- 編輯Android程式遊戲對話方塊Android遊戲
- Android UI系列-----Dialog對話方塊AndroidUI
- Qt下的模態和非模態對話方塊QT
- VUE:點選開啟的對話方塊外面時,對話方塊總是被關閉Vue
- js特效 對話方塊 懸浮箭頭JS特效
- Java在Swing中如何實現彈出一個對話方塊的效果?Java
- JavaFX 如何使用內建的對話方塊Java
- Android 中 WebView 的除錯方法AndroidWebView除錯