android - WebViewClient 和 WebChromeClient 是互斥的吗?

标签 android webview webviewclient webchromeclient

从此great explanation关于 WebViewClientWebChromeClient 之间的区别,似乎如果你使用一个,你不应该使用另一个(对于同一个 WebView 对象)。

我的理解正确吗?

如果不是,何时将 WebViewClient WebChromeClient 用于同一个 WebView 对象?

是否有一个例子是只使用 WebViewClient WebChromeClient 对于同一个 WebView 对象会完成某个目标吗?

最佳答案

您当然可以同时使用它们,它们只是具有不同的功能。设置自己的自定义WebViewClient让你处理onPageFinished、shouldOverrideUrlLoading等,WebChromeClient让你处理Javascript的alert()等函数。

只需创建自己的类,例如:

public class MyWebChromeClient extends WebChromeClient {
    //Handle javascript alerts:
    @Override
public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result)  
{
  Log.d("alert", message);
  Toast.makeText(context, message, 3000).show();
  result.confirm();
  return true;
};
...

和/或

public class MyWebViewClient extends WebViewClient {
@Override
    //Run script on every page, similar to Greasemonkey:
public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:alert('hi')");
    }
...

只需覆盖文档中描述的函数,然后在 onCreate 中设置您的客户端:

webview.setWebViewClient(new MyWebViewClient());
webview.setWebChromeClient(new MyWebChromeClient());

关于android - WebViewClient 和 WebChromeClient 是互斥的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474768/

相关文章:

android - setCompoundDrawables 对可绘制形状无效

Android 应用程序使用 Smack 和 Openfire 4.1.4 发送图像时出错

android - shouldOverrideUrlLoading 将加载 "file:///"但不加载 "http://"URL 参数

android - stopLoading() 到底做了什么?

android - WebView loadUrl 只工作一次

android - 使用 http-equiv ="refresh"元标记重定向到视频在 Android 嵌入式浏览器中不起作用

android - 解析 GCM 推送通知不适用于 Android 6.0 Marshmallow Developer Preview 3

android - 如何更改系统警报设置文本动态

java - 使用 Java 和 JavaFX 设置 WebView 中的文本颜色

android - Android Froyo (2.2) 的 shouldInterceptRequest 等效项