WebView調用js方法獲取返回值的完美解決方案


 

在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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM