一、應(yīng)用場景
移動端接入一個H5的文檔編輯器罗丰。當需要退出編輯頁面的時候判斷是否需要保存萌抵,執(zhí)行保存操作成功后退出頁面元镀,保存失敗的話彈窗提示是否重試。這里面需要用到的交互有:
- Android詢問H5文檔是否有改動
- H5告知Android是否有改動讨永,Android根據(jù)告知選擇是否顯示保存彈窗
- Android調(diào)用H5的保存方法
- H5告知Android文檔是否保存成功卿闹,Android根據(jù)告知選擇是退出頁面還是顯示重試彈窗
二比原、核心功能
需要實現(xiàn)上述功能杠巡,落實到代碼層面上就是實現(xiàn):
- Android調(diào)用H5的方法
- H5調(diào)用Android方法。
三蚌铜、Android調(diào)用H5的方法
Android中調(diào)用JS方法:customFunction:
mWebView.loadUrl("javascript:customFunction()");
當然在這之前需要先設(shè)置WebView支持JS。
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
四囚痴、H5調(diào)用Android的方法
WebView依舊是提供了相應(yīng)的方法:
mWebView.addJavascriptInterface(new JsInterface(this), "android");
public class JsInterface {
private Context mContext;
public JsInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void passValue(String value) {
androidText.setText(dataFormat.format(new Date()) + "\n接收到來自H5的信息:" + value);
}
}
addJavascriptInterface
需要Android 4.2以上深滚,它的倆個參數(shù)痴荐,第一個參數(shù)為提供給JS訪問的對象官册,后一個參數(shù)為對象暴露在JS中的名稱膝宁,JS可以使用該名稱,訪問到這個對象合蔽,進而調(diào)用對象中的方法辈末。</br>
在暴露給JS的對象中添加了@JavascriptInterface
注解的方法映皆,可以直接在JS中被調(diào)用捅彻。這里也給出JS調(diào)用的示例:
<script>
function passValue1(value) {
window:android.passValue(value);
}
</script>
其中android
為addJavascriptInterface
方法的第二個參數(shù)值步淹,passValue
為暴露給JS的對象中添加了@JavascriptInterface
注解的方法名。