一追他、原生方法
http://www.reibang.com/p/5cc2eae14e07
1良哲、JS端調(diào)用Android端代碼有3種方法:
(1)通過WebView
的addJavascriptInterface()
進(jìn)行對(duì)象映射。
(2)通過WebViewClient
的shouldOverrideUrlLoading()
方法回調(diào)攔截url室琢。
(3)通過WebChromeClient
的onJsAlert()遮糖、onJsConfirm()、onJsPrompt()
方法回調(diào)攔截JS對(duì)話框alert()速客、confirm()戚篙、prompt()消息。
2溺职、通過WebView
的addJavascriptInterface()
進(jìn)行對(duì)象映射
webview
在loadur
l之前注冊(cè)一個(gè)對(duì)象岔擂,可以在這個(gè)對(duì)象里封裝h5所需要的參數(shù),至于h5什么時(shí)候調(diào)用這個(gè)對(duì)象h5自己決定浪耘,解決了webview
加載完頁面才能往js注入傳值的問題乱灵。
Android端:
public class AndroidToJS {
// 定義JS需要調(diào)用的方法
// 被JS調(diào)用的方法必須加入@JavascriptInterface注解
@JavascriptInterface
public void callAndroid(String msg){
Log.e("zw","JS調(diào)用了Android的callAndroid(),msg : " + msg);
}
}
h5端:
//JS調(diào)用Android原生方法
function callAndroid(){
// 由于對(duì)象映射七冲,所以調(diào)用android對(duì)象等于調(diào)用Android映射的對(duì)象
android.callAndroid("js調(diào)用了");
}
二痛倚、第三方框架
iOS WebViewJavascriptBridge
Android JsBridge
//判斷安卓
const isAndroid = navigator.userAgent.indexOf('Android') > -1 || navigator.userAgent.indexOf('Linux') > -1;
//判斷iOS
const isIOS = !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
if (isAndroid) {
// 'scan'為標(biāo)志符 app定義 ,data 為傳過去app的值
window.WebViewJavascriptBridge.callHandler( 'scan', data
function(responseData) {});
}else if (isIOS) {
//ios如果不需要傳值 則data要傳null
window.webkit.messageHandlers.scan.postMessage(data)
}