2010-04-28 143 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