有時我們有這樣的需求:需要從app的網(wǎng)頁中點擊調(diào)用軟件內(nèi)部的頁面,又或者是軟件內(nèi)部調(diào)用網(wǎng)頁的js方法裁奇。
js代碼調(diào)用Android中的方法
addJavascriptInterface方法有兩個參數(shù):
第一個參數(shù)就是我們一般會實現(xiàn)一個自己的類俏蛮,類里面提供我們要提供給javascript訪問的方法撑蚌;
第二個參數(shù)是訪問我們在obj中聲明的方法時候所用到的js對象;
調(diào)用模式為window.interfaceName.方法名()或者是javascript: interfaceName.方法名() 搏屑。
//啟用webview對javascript支持
webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInterface(new WebAppInterface(this), "android");
//接口名稱自定義
public class WebAppInterface {
Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
//參數(shù)名這個自己定義争涌,和網(wǎng)頁js傳參對應(yīng)即可
@JavascriptInterface
public void show(String url) {
//這里就進(jìn)行軟件內(nèi)部處理了,
}
}
在網(wǎng)頁中進(jìn)行js調(diào)用
<a onClick="window.android.show('傳參')" />
Android代碼調(diào)用js方法
很簡單通過WebView的loadUrl方法去調(diào)用的就行辣恋、只是改變下參數(shù)url的寫法
// 無參數(shù)調(diào)用
webView.loadUrl("javascript:androidtojs()");
// 傳遞參數(shù)調(diào)用
webView.loadUrl("javascript:androidtojsargs("傳參")");
在網(wǎng)頁中創(chuàng)建js方法
<script type="text/javascript">
function androidtojs(){
//自己實現(xiàn)處理
}
function androidtojsargs(arg){
//自己實現(xiàn)處理
}
</script>
JAVA和JS交互注意事項
1第煮、盡量用js調(diào)用Android方法:
- Android調(diào)用js里面的函數(shù)的效率遠(yuǎn)遠(yuǎn)低于js調(diào)用Android
- Android調(diào)用js的函數(shù),沒有返回值抑党,調(diào)用了就控制不到了
2包警、Js調(diào)用Android的方法,返回值如果是native字符串底靠,必須使用toLocaleString()轉(zhuǎn)成locale的才能正常使用害晦,但是有的耗時
3、網(wǎng)頁中盡量使用原生的js寫業(yè)務(wù)腳本、以提升加載速度