[Android]WebView 調(diào)用JS方法獲取返回值

Android4.4+方法

如果你項(xiàng)目的minSdkVersion 為4.4 以上,那么你可以直接通過WebView的evaluateJavascript()方法 拿到JS方法的返回值

   mWebView.evaluateJavascript("javascript:JSMethod()", new ValueCallback<String>() {
        @Override
        public void onReceiveValue(String value) {
            //此處為 js 返回的結(jié)果
        }
    });
}

兼容Android4.4 以下

但是市場(chǎng)上4.4以下的機(jī)型占有率還是很高的,而你的minSdkVersion 又是在4.4以下,那么你就不得不做適配
除了以上方法可以調(diào)用JS方法,還有一種傳統(tǒng)的方法也可以調(diào),那就是通過WebView的loadUrl()。
但是該方法不直接返回JS方法的返回值,我們可以使用一些小技巧間接的獲取該JS方法的返回值。

例如,我們通常是這么調(diào)用一個(gè)JS的 方法

 webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url); //*
                webView.loadUrl("javascript:JSMethod('" + userId + "')");
            }
        });

但該JS方法沒有添加回調(diào)原生的函數(shù)時(shí),我們是獲取不到該方法的返回值

那么我們就得換一種方式,直接調(diào)用JS的alert方法將JS方法的返回值提示給我們,alert出來的message就是我們要獲取的返回值。

將上面調(diào)用JS方法的地方改一下:

 webView.loadUrl("javascript:alert(JSMethod('" + userId + "'))");

拿到JSAlert返回的消息并處理提示框

webview.setWebChromeClient(
      new WebChromeClient() {
          @Override
          public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
          Logger.e(message);
          result.confirm();
          return true;
   }
);

這樣既能調(diào)用到JS方法,也能拿到該JS 方法的返回值,當(dāng)然如果你加載的這個(gè)H5 頁面有其他的alert也是會(huì)在這里回調(diào)的,至于怎么處理就見仁見智了,例如你可以給個(gè)flag啊...

注意事項(xiàng):

1.加載完H5 之后再調(diào)用JS方法,所以你的JS方法可以寫在onPageFinished里面,而且要在父類方法后面執(zhí)行。
2.自行處理alert回調(diào)時(shí),要執(zhí)行result.confirm();或JSResult的其他方法告訴H5我處理完了,return true表示我們攔截了系統(tǒng)的alert提示;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這篇博客主要來介紹 WebView 的相關(guān)使用方法,常見的幾個(gè)漏洞,開發(fā)中可能遇到的坑和最后解決相應(yīng)漏洞的源碼,以...
    Shawn_Dut閱讀 7,538評(píng)論 3 55
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評(píng)論 25 709
  • 前言 總結(jié) Android WebView 常用的相關(guān)知識(shí)點(diǎn),令包含以下干貨內(nèi)容分析:Js注入漏洞、WebView...
    無名小子的雜貨鋪閱讀 70,115評(píng)論 17 169
  • 第一章: JS簡(jiǎn)介 從當(dāng)初簡(jiǎn)單的語言,變成了現(xiàn)在能夠處理復(fù)雜計(jì)算和交互,擁有閉包、匿名函數(shù), 甚至元編程等...
    LaBaby_閱讀 1,756評(píng)論 0 6
  • 筱雅/文 隨著“馬云鄉(xiāng)村教師獎(jiǎng)”180名提名的通知與公示,我的內(nèi)心,歡心雀躍。 回想8月30日那天早上,學(xué)校剛剛開...
    秋水淺語閱讀 308評(píng)論 0 1

友情鏈接更多精彩內(nèi)容