在平时开发中很多情况下需要涉及到使用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() {
@JavascriptInterface
public 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的交互!!