Javascript彈出框有以下三種:
javascript
- alert();
- window.confirm("Are you srue?");
- window.prompt("Please input some word";,"this is text");
WebChromeClient 中對三種dialog進行了捕捉,但不幸的是,並無回調函數能夠使用,
或者說不能得到用戶是點擊「OK」仍是「CANCEL」的操做結果。
我的覺得,這些方法的設置是爲了對一些涉及到html操做的應用程序進行測試時使用的。
在WebChromeClient中還有如下的方法:
- onProgressChanged(WebView view, int newProgress);
- onReceivedIcon(WebView view, Bitmap icon);
- onReceivedTitle(WebView view, String title);
- onRequestFocus(WebView view);
- onCloseWindow(WebView window);
- onProgressChanged(WebView view, int newProgress)
這些方法的使用我會在之後的博文中講到.
請你們先看今天講解的重點
- public class WebViewDemo extends Activity {
-
- private static final String LOG_TAG = "WebViewDemo";
- private WebView mWebView;
- private TextView mReusultText ;
- private Handler mHandler = new Handler();
-
- @Override
- public void onCreate(Bundle icicle) {
-
- super.onCreate(icicle);
- setContentView(R.layout.main);
- //得到瀏覽器組件
- //WebView就是一個簡單的瀏覽器
- //android瀏覽器源碼存在於LINUX\android\package\apps\Browser中
- //裏面的全部操做都是圍繞WebView來展開的
- mWebView = (WebView) findViewById(R.id.webview);
- mReusultText = (TextView) findViewById(R.id.resultText);
- //WebSettings 幾乎瀏覽器的全部設置都在該類中進行
- WebSettings webSettings = mWebView.getSettings();
- webSettings.setSavePassword(false);
- webSettings.setSaveFormData(false);
- webSettings.setJavaScriptEnabled(true);
- webSettings.setSupportZoom(false);
- mWebView.setWebChromeClient(new MyWebChromeClient());
- /*
- * DemoJavaScriptInterface類爲js調用android服務器端提供接口
- * android 做爲DemoJavaScriptInterface類的客戶端接口被js調用
- * 調用的具體方法在DemoJavaScriptInterface中定義:
- * 例如該實例中的clickOnAndroid
- */
- mWebView.addJavascriptInterface(new DemoJavaScriptInterface(),"androd");
- mWebView.loadUrl("file:///android_asset/page.html");
- }
-
- final class DemoJavaScriptInterface {
- DemoJavaScriptInterface() {}
-
- /**
- * 該方法被瀏覽器端調用
- */
- public void clickOnAndroid() {
- mHandler.post(new Runnable() {
- public void run() {
- //調用js中的onJsAndroid方法
- mWebView.loadUrl("javascript:onJsAndroid()");
- }
- });
- }
- }
-
- /**
- * 繼承WebChromeClient類
- * 對js彈出框時間進行處理
- *
- */
- final class MyWebChromeClient extends WebChromeClient {
-
- /**
- * 處理alert彈出框
- */
- @Override
- public boolean onJsAlert(WebView view,String url,
- String message,JsResult result) {
- Log.d(LOG_TAG,"onJsAlert:"+message");
- mReusultText.setText("Alert:"+message);
- //對alert的簡單封裝
- new AlertDialog.Builder(WebViewDemo.this).
- setTitle("Alert").setMessage(message).setPositiveButton("OK",
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface arg0, int arg1) {
- //TODO
- }
- }).create().show();
- result.confirm();
- return true;
- }
-
- /**
- * 處理confirm彈出框
- */
- @Override
- public boolean onJsConfirm(WebView view, String url, String message,
- JsResult result) {
- Log.d(LOG_TAG, "onJsConfirm:"+message);
- mReusultText.setText("Confirm:"+message);
- result.confirm();
- return super.onJsConfirm(view, url, message, result);
- }
-
- /**
- * 處理prompt彈出框
- */
- @Override
- public boolean onJsPrompt(WebView view, String url, String message,
- String defaultValue, JsPromptResult result) {
- Log.d(LOG_TAG,"onJsPrompt:"+message);
- mReusultText.setText("Prompt input is :"+message);
- result.confirm();
- return super.onJsPrompt(view, url, message, message, result);
- }
- }
- }