我在WebView中显示网页,网页上有一个按钮。当你点击这个按钮时,一个确认对话框应该会弹出来,但它并没有显示在我的WebView中。如果我在android浏览器中转到相同的网页,它确实会弹出。有谁知道如何在WebView中处理来自网页的弹出对话框?
发布于 2010-04-28 10:41:09
好了,找到答案了,这就是答案!
为了处理来自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;
}
}
别忘了在你的WebView中设置你的WebChromeClient ...
mWebView.setWebChromeClient(new MyWebChromeClient());
注意..这不是我的代码,但我找到了它,它可以很好地处理WebView中的javascript确认对话框!
干杯!
发布于 2018-07-11 00:24:42
感谢Brockoli的方法。我需要这个给Xamarin.Android
public class MyWebChromeClient : WebChromeClient
{
private Context mContext;
private JsResult res;
public MyWebChromeClient(Context context)
{
mContext = context;
}
public override bool OnJsConfirm(WebView view, string url, string message, JsResult result)
{
res = result;
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.SetTitle("Confirm:");
builder.SetMessage(message);
builder.SetPositiveButton(Android.Resource.String.Ok, OkAction);
builder.SetNegativeButton(Android.Resource.String.Cancel, CancelAction);
builder.Create();
builder.Show();
return true;
//return base.OnJsConfirm(view, url, message, result);
}
private void CancelAction(object sender, DialogClickEventArgs e)
{
res.Cancel();
}
private void OkAction(object sender, DialogClickEventArgs e)
{
res.Confirm();
}
}
回到创建webview的活动中(web_view)
web_view.SetWebChromeClient(new MyWebChromeClient(this));
https://stackoverflow.com/questions/2726377
复制相似问题