有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何访问WebChromeClient中的方法?

我正在webchromeclient中设置如下方法:

web1.setWebChromeClient(new WebChromeClient() {
public void onHideCustomView(){}
});

然后我想创建javascriptinterface来调用onHideCustomView()。 如何调用webchromeclient中的方法?我试图使用stacktrace获取方法名,但它只显示匿名内部类“MainActivity$34.onHideCustomView()


共 (2) 个答案

  1. # 1 楼答案

    如果要为js提供接口,请使用以下代码:

    public class MyJsInterface {
        private WeakReference<View> myTargetView;
    
        public MyJsInterfaceImpl(View view){
            this.myTargetView = new  WeakReference<>(view);
        }
    
        @JavascriptInterface
        public void onHideCustomView(){
            if(myTargetView.get() != null){
                myTargetView.get().post(new Runnable(){
                    @Override
                    public run(){
                        myTargetView.get().setVisibility(View.GONE);
                    }
                });
            }
        }
    }
    
    webview.addJavascriptInterface(myJsInterface, "lovelyAndroid");
    

    在js中:

    window.lovelyAndroid.onHideCustomView()
    

    别忘了在webview中启用js:

    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);
    
  2. # 2 楼答案

    您总是可以在类中创建一个扩展WebChromeClient的私有类,例如:

    class YourCustomWebChromeClient extends WebChromeClient
    

    在这个类中重写方法,如下所示

    @Override
        public void onHideCustomView()
        { 
           //add your code when onHideCustomView is called 
        }
    

    只需使用这个定制的chrome客户端设置web1

    web1.setWebChromeClient(YourCustomWebChromeClient);
    

    使用YourCustomWebChromeClient对象,现在可以调用onHideCustomView方法