2011-02-07 52 views
12

我使用webViewClient實現了很多東西,比如onUnhandledKeyEvent,shouldOverrideUrlLoading等。如果想添加對alertbox的支持,那麼需要切換到WebChromeClient,那麼我不能做其他事情。任何人都知道如何混合這兩種未來?
我在http://lexandera.com/2009/01/adding-alert-support-to-a-webview/Android:如何在WebViewClient中添加支持javascript alert框?


檢查javasript警告框代碼謝謝

+0

哎魯維無法理解比u需要? – 2011-02-07 11:34:02

+0

我想添加javascript alertbox支持到WebViewClient不要使用WebChromeClient?如果你不明白,那就讓帖子代碼 – 2011-02-07 11:36:17

回答

25

落實WebViewClient和WebChromeClient都喜歡這個

webView = (WebView) findViewById(R.id.webview); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 

progressBar = new ProgressDialog(this); 
progressBar.setCancelable(true); 
progressBar.setMessage("Loading..."); 
progressBar.show(); 

final Context mapp = this; 

webView.setWebViewClient(new WebViewClient() { 

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    Log.i("TEST", "Processing webview url click..."); 
    // to kill activity 
    view.loadUrl(url); 
    return true; 
} 

public void onPageFinished(WebView view, String url) { 
    Log.i("TEST", "Finished loading URL: " + url); 
    if (progressBar.isShowing()) { 
     progressBar.dismiss(); 
    } 
}........ 

然後實現WebChromeClient爲 JavaScript警告,確認和提示

webView.setWebChromeClient(new 
WebChromeClient() {    
@Override 
public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) { 
    new AlertDialog.Builder(mapp) 
     .setTitle(R.string.title_dialog_alert) 
     .setMessage(message) 
     .setPositiveButton(android.R.string.ok, 
      new AlertDialog.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        result.confirm(); 
       } 
      }).setCancelable(false).create().show(); 

     return true; 
} 

@Override 
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { 
     new AlertDialog.Builder(mapp) 
     .setTitle(R.string.title_dialog_confirm) 
     .setMessage(message) 
     .setPositiveButton(android.R.string.ok, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
       result.confirm(); 
      } 
     }).setNegativeButton(android.R.string.cancel, 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       result.cancel(); 
      } 
     }).create().show(); 
    return true; 
} 

@Override 
    public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { 
      final LayoutInflater factory = LayoutInflater.from(mapp); 
      final View v = factory.inflate(R.layout.javascript_prompt_dialog, null); 

      ((TextView)v.findViewById(R.id.prompt_message_text)).setText(message); 
      ((EditText)v.findViewById(R.id.prompt_input_field)).setText(defaultValue); 

      new AlertDialog.Builder(mapp) 
       .setTitle(R.string.title_dialog_prompt) 
       .setView(v) 
       .setPositiveButton(android.R.string.ok, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton) { 
           String value = ((EditText)v.findViewById(R.id.prompt_input_field)).getText().toString(); 
           result.confirm(value); 
         } 
      }) 
      .setNegativeButton(android.R.string.cancel, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
           result.cancel(); 
         } 
      }) 
      .setOnCancelListener(
        new DialogInterface.OnCancelListener() { 
         public void onCancel(DialogInterface dialog) { 
           result.cancel(); 
         } 
      }) 
      .show(); 

      return true; 
     }; 

}); 

瞭解更多詳情請查看http://code.google.com/p/mosembro/source/browse/trunk/src/com/lexandera/mosembro/Mosembro.java

+0

真棒,謝謝! – 2012-01-20 09:27:40

+0

我已經給了它2天 – 2012-01-20 10:08:48

4

如果要添加到alertbox支持則需要切換到WebChromeClient然後我不能做其他的事情。

您可以在大多數編程語言中使用多個對象,包括Java。因此,您有一個WebViewClient a WebChromeClient作爲單獨的對象。

2

你需要設置WebChromeClient(此句柄JavaScript對話框,網站圖標,標題和進度)爲您的WebView

WebView wView = new WebView(this){ 
      @Override 
      public boolean onJsAlert(WebView view, String url, String message, 
        JsResult result) { 
       // TODO Auto-generated method stub 
       Log.i("my log","Alert box popped"); 
       return super.onJsAlert(view, url, message, result); 
      } 
}; 
setContentView(wView); 

wView.getSettings().setJavaScriptEnabled(true); 

WebChromeClient cClient = new WebChromeClient(); 
wView.setWebChromeClient(cClient); 

wView.loadUrl("file:///android_asset/" + yourHtmlFile); 

希望它能幫助:)

0
WebView wView = new WebView(this){ 
      @Override 
      public boolean onJsAlert(WebView view, String url, String message, 
        JsResult result) { 
       // TODO Auto-generated method stub 
       Log.i("my log","Alert box popped"); 
       return super.onJsAlert(view, url, message, result); 
      } 
}; 
setContentView(wView); 

wView.getSettings().**strong text**setJavaScriptEnabled(true); 

WebChromeClient cClient = new WebChromeClient(); 
wView.setWebChromeClient(cClient); 

wView.loadUrl("file:///android_asset/" + yourHtmlFile);