如何访问 WebChromeClient 中的方法?

Posted

技术标签:

【中文标题】如何访问 WebChromeClient 中的方法?【英文标题】:How To access method inside WebChromeClient? 【发布时间】:2018-07-14 14:30:06 【问题描述】:

我正在 webchromeclient 中设置这样的方法:

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

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

【问题讨论】:

【参考方案1】:

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

class YourCustomWebChromeClient extends WebChromeClient

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

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

只需使用此自定义 chrome 客户端设置您的 web1

web1.setWebChromeClient(YourCustomWebChromeClient);

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

【讨论】:

如果我有多个:web1.setWebChromeClient(YourCustomWebChromeClient); web2.setWebChromeClient(YourCustomWebChromeClient); web3.setWebChromeClient(YourCustomWebChromeClient);我如何调用 web2 onHideCustomView?【参考方案2】:

如果要为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);

【讨论】:

以上是关于如何访问 WebChromeClient 中的方法?的主要内容,如果未能解决你的问题,请参考以下文章

WebChromeClient 集成到 Android 应用程序中

将javascript注入WebChromeClient

WebView如何判断页面真正成功加载?求大神帮助

Cordova 6.2.3 没有 WebChromeClient,如何覆盖 onJsPrompt()?

WebViewClient 与 WebChromeClient

如果使用 WebChromeClient 点击了 market:// 链接,则打开 Play 商店