在最近項目開發中頻繁用到Js與Java的交互,今天把相關知識點整理出來,歡迎你們吐槽。啪啪啪~ javascript
mWebView.addJavascriptInterface(new DmJavaScriptInterface(),"androidObject");
在Js中androidObject就是DmJavaScriptInterface的一個對象,經過這個對象能夠調用類中的相關方法 java
final class DmJavaScriptInterface { DmJavaScriptInterface() { } @JavascriptInterface public void getPhoto() { Log.e(TAG,"js調用原生方法"); LsUIHelper.getInstance().showLsChoosePicListActivity(mContext, 13); } @JavascriptInterface public String getToken() { String token = getUserToken(mContext); // Log.e(TAG, "getToken token :=" + token); return token; } @JavascriptInterface public void finishSubmit() { LsFeedbackListActivity.this.finish(); } }
在Js中經過androidObject.getPhoto(),androidObject.getToken(),androidObject.finishSubmit()就能夠實現調用Java端的方法。 android
webView.loadUrl("javascript:sayHello()");
String call = "javascript:satHello()"; webView.loadUrl(call);
String str = "你好"; String call = "javascript:satHello(\""+str+"\")"; webView.loadUrl(call);
這類比較特殊,得分兩種狀況。在Android4.4以前不提供調用Js函數並獲取返回值的方法。解決辦法是先讓java調用Js的方法(有參數無返回值),而後Js在改方法中回調Java的方法,並將結果做爲參數傳遞給Java的方法。相關代碼以下: web
String str = "你好"; String call = "javascript:satHello(\""+str+"\")"; webView.loadUrl(call);
Function sayhello(str) { Window.androidObject.onResultContent(「hello」); }
@JavascriptInterface public void onResultContent(int result) { Log.i(LOGTAG, "onResultContentresult=" + result); }
Android4.4以後使用evaluateJavascript便可 ide
function getGreetings() { return 1; }
private void testEvaluateJavascript(WebView webView) { webView.evaluateJavascript("getGreetings()", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.i(LOGTAG, "onReceiveValue value=" + value); } }); }