有没有办法将 Javascript 警报转换为在 Android WebView 中显示为 Toast?
Is there a way to convert Javascript alerts to show as Toast in Android WebView?
我有一个网络应用程序可以在大多数页面上使用 Javascript 警报。现在我最近为同一个应用程序创建了一个 WebView 应用程序。该应用程序运行正常,警报显示。
我看到的解决方案建议将 JavaScript 代码绑定到 Android 代码,然后调用这些方法来显示 toast。
我毫不怀疑这行得通,但现在,对我来说,这意味着我必须重新编写触发这些警报的代码。
我的问题是,有没有办法自动捕获所有警报并将其内容显示为 toast?
您可以使用 WebChromeClient:
https://developer.android.com/reference/android/webkit/WebChromeClient
创建它的一个实例,将其设置为您的 webview,并覆盖 onJsAlert
。
请务必阅读文档,以 return 正确的值,因此它也不会显示 javascript 警报。
感谢 and this answer also。我设法找到了一个完全符合我要求的解决方案。因此,对于将来偶然发现相同问题的任何人,下面的代码片段适合您:
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
final JsResult result) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
result.confirm();
return true;
}
});
其中 mWebView
是 WebView 实例。
我有一个网络应用程序可以在大多数页面上使用 Javascript 警报。现在我最近为同一个应用程序创建了一个 WebView 应用程序。该应用程序运行正常,警报显示。
我看到的解决方案建议将 JavaScript 代码绑定到 Android 代码,然后调用这些方法来显示 toast。
我毫不怀疑这行得通,但现在,对我来说,这意味着我必须重新编写触发这些警报的代码。
我的问题是,有没有办法自动捕获所有警报并将其内容显示为 toast?
您可以使用 WebChromeClient:
https://developer.android.com/reference/android/webkit/WebChromeClient
创建它的一个实例,将其设置为您的 webview,并覆盖 onJsAlert
。
请务必阅读文档,以 return 正确的值,因此它也不会显示 javascript 警报。
感谢
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
final JsResult result) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
result.confirm();
return true;
}
});
其中 mWebView
是 WebView 实例。