Android中的JS交互小结

本文详细介绍了在开发过程中如何通过WebView加载网页并实现与网页内部元素的交互,包括解决输入框无法弹出输入法的问题,设置JavaScript交互功能,以及如何在混淆时不丢失关键的JS交互类。

在平时开发中很多情况下需要涉及到使用WebView加载一个网页,这时候就需要跟网页里面的按钮或者输入框等进行数据或行为进行交互。
首先解决一个问题:在跟输入框交互有的时候弹不出输入法的时候解决办法,我们只要给WebView外层添加一个LinearLayout嵌套,如下:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <WebView
            android:id="@+id/webview_id"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </LinearLayout>

当我们跟网页中的按钮交互的时候我们需要先给WebView设置几个东西:

WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
    …
});
mWebView.setWebChromeClient(new WebChromeClient() {
    …
});

这样简单设置之后,使得WebView能够支持JS交互功能,然后我们给WebView设置addJavascriptInterface交互回调:

mWebView.addJavascriptInterface(new LiveJsInterface() {
@JavascriptInterfacepublic void  clickOnAndroid(int type) {

}
}, “android”);

最后只要网页前端人员οnclick=”window.android.clickOnAndroid()”添加类似的方法即可。
注意点:
1.clickOnAndroid函数名字要跟网页前端中保持一致,且android这个字符串也要保持一致才行,当然函数中的参数int type就是从网页前端返回回来的数据,你也可以返回一些自定义的字符串。
2.@JavascriptInterface这个标签在SDK版本为4.2的时候必须要加上去否则无法交互成功。

做完从网页中得到Js的数据,那我们如何传参数给网页呢:

mWebView.loadUrl("javascript:getData()");

我们只要loadUrl网页中相对应的JS函数就好,如果函数中需要带参数可自行拼接上去就好。

最后在混淆的时候我们需要这么做:

-keepclassmembers  class com.test.demo.MainActivity$TestJsInterface{
   public *;
}

即保证不混淆具体界面下的JS交互类就好。

现在的应用或多或少总会接触到跟网页交互的界面,所以很有必要总结一些WebView跟Js的交互!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值