如何访问 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 应用程序中
Cordova 6.2.3 没有 WebChromeClient,如何覆盖 onJsPrompt()?