在Android項目中我們或多或少會涉及到與js交互的問題,這其中WebView是必須掌握的控件,今天主要說說我們通過WebView調用js方法,然后如何很好的獲取返回值。這里我總結了三種方式,大家可根據需求選擇。
一、Android版本在4.4及以上
mWebView.evaluateJavascript("javascript:jsMethod()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//value即為js返回值
}
});
如果你項目最低支持版本在4.4以上,那這種方式最簡單最完美,否則會報以下警告:
Call requires API level 19 (current min is 14): android.webkit.WebView#evaluateJavascript
二、Android4.4以下版本
雖說現在4.4以下版本不多了,但是只要存在,我們就需要努力兼容。
第一步,利用WebView的loadUrl()方法,調用js的alert方法,
mWebView().loadUrl("javascript:alert(jsMethod())");
第二步,在alert回調中的message就是我們想要的返回值
mWebView.setWebChromeClient(
new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
//message即為返回值
result.confirm();
return true;
}
);
返回值雖然拿到了,但是這種方法缺點挺多的:
1、不能忘記在回調中調用result.confirm,否則webview會出現奇怪的不可控現象,大家可以去掉試試;
2、onJsAlert方法要return true,表示我們自己處理alert,不需要js管啦;
3、js在alert方法中別return一個值回來,否則也會出現奇怪現象;
4、在華為Android版本8.0以上的某些機型中,會出現無法攔截js的alert,會直接將js的alert彈框彈出,很難受。。。
三、最穩妥的方法
這種方法需要和js協調好,雙方配合完成:
1、我們同樣利用WebView的loadUrl()方法,調用js普通方法
mWebView().loadUrl("javascript:jsMethod()");
2、給js注入一個方法,且加入參數,並和js開發人員約定,當我們調用其第一步中的jsMethod方法,他調用我們注入的方法,並將返回值傳回
mWebView().addJavascriptInterface(this, "viewpager");
@JavascriptInterface
public void getResult(String str) {
//str 即為返回值
}
OK!搞定啦,到此你就可以開心的與js交互,並拿到他的返回值啦!希望我的總結可以幫助到你~
---------------------
作者:康小白Code
來源:CSDN
原文:https://blog.csdn.net/k_bb_666/article/details/86673983
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!