Android WebView與JS互動及訊息處理

來源:互聯網
上載者:User

前一段時間做公司的項目,涉及到WebView與JS之間的通訊,於是在網上查了點資料研究了一下下。


一、WebView與JS互動

1.JS調用本地方法

這個功能的實現還是比較容易的。直接調用WebView的該方法就可以添加介面了,不過先要啟動互動

// 啟用javascript  mWebView.getSettings().setJavaScriptEnabled(true);// 添加介面public void addJavascriptInterface (Object object, String name) 


Object是JS調用本地的類的對象,name是對象的別名,在JS可以用這個別名+點文法+方法名就可以調用本地的方法。例如:

WebView mWebView;// ...mWebview.addJavascriptInterface(this, "myjs");

再定義一個JS可以調用的方法:

public void jsFunction(String string) {System.out.println("js調用了這個方法:" + string);}
這樣在JS就可以調用這個方法

注意:該方法不可以定義成私人的,不然JS就不能調用


2.本地調用JS方法

這個就更容易了- -,直接用以下方法就行了,假設JS上有一個方法叫androidFunction()

mWebview.loadUrl("javascript:androidFunction()");


二、訊息處理

1、遇到Uncaught ReferenceError:...錯誤

出現該錯誤不會崩潰,它的意思是本地方法調用JS時沒有找到調用的方法。萬一我們調用的方法不存在,需要做相應的處理怎麼辦?Shamoo嘗試try ... catch ...抓取一下異常,發現什麼都沒有抓到...後來仔細看了一下錯誤Log的TAG,是Web Console。Shamoo想肯定有辦法抓取這個異常的,於是看了一下官方文檔,終於發現了這麼一個方法:

mWebview.setWebChromeClient(new WebChromeClient() {    @Override    public boolean onConsoleMessage(ConsoleMessage consoleMessage) {        // TODO Auto-generated method stubif (consoleMessage.message().contains("Uncaught ReferenceError")) {// do something...}return super.onConsoleMessage(consoleMessage);    }});
這個方法可以監聽WebView的控制台訊息,然後判斷一下訊息是否包含“Uncaught ReferenceError”就可以捕獲該訊息了

2.擷取JS方法的返回值

仔細觀察會發現WebView的loadUrl方法是沒有返回值的,那要是想要擷取JS方法的返回值就該怎麼做呢?Shamoo查了一些資料,發現網上也沒有很好的解決辦法,後來只能通過回調的方法來實現返回,雖然很不靈活,不過也沒有辦法...

在loadUrl調用JS的一個方法,然後JS執行方法的時候,再調用Android本地的一個方法,並把返回值作為參數傳遞下來。





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.