2010-04-28 144 views
18

我在WebView中顯示一個網頁,並在網頁上有一個按鈕。當你點擊按鈕時,彈出一個確認對話框,但它不會顯示在我的WebView中。如果我轉到android瀏覽器中的相同網頁,它會彈出。任何人都知道如何處理來自WebView內部網頁的彈出對話框?如何處理webview確認對話框?

回答

42

好的,找到答案,就在這裏!

爲了處理來自WebView中網頁的彈出確認,您需要重寫WebChromeClient中的onJsConfirm方法,以將彈出窗口顯示爲Android Alert對話框。這是執行此操作的代碼。

final Context myApp = this; 
final class MyWebChromeClient extends WebChromeClient { 
    @Override 
    public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { 
     new AlertDialog.Builder(myApp) 
     .setTitle("App Titler") 
     .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; 
    } 
} 

不要忘記設置你的WebChromeClient在你的WebView ...

mWebView.setWebChromeClient(new MyWebChromeClient()); 

注..這是不是我的代碼,但我發現它,它完全適用於處理JavaScript確認WebView中的對話框!

乾杯!

+0

我有mvc視圖和Sign Out但不能在android模擬器上工作。我在這裏需要幫助, – 2013-04-23 12:29:55

+1

感謝brockoli ...經過一些實驗後,似乎只需從onJsConfirm方法返回false就足以讓WebView爲您顯示一個對話框 - 至少在JellyBean中...默認情況下WebChromeClient已經返回false,所以'webView.setWebChromeClient(new WebChromeClient())''爲我完成了這項工作! – Stevie 2013-06-21 16:22:06