H5调用NA
平台 | 方法 | 备注
Android | shouldOverrideUrlLoading | scheme拦截方法
Android | addJavascriptInterface | API
Android | onJsAlert()、onJsConfirm()、onJsPrompt()
IOS | 拦截URL
IOS(UIwebview) | JavaScriptCore | API方法,IOS7+ 支持
IOS(WKwebview) | window.webkit.messageHandlers | APi方法,IOS8+支持
NA调用H5方法
平台 | 方法 | 备注
Android | loadurl() |
Android | evaluateJavascript() | Android 4.4 +
IOS(UIwebview) | stringByEvaluatingJavaScriptFromString
IOS(UIwebview) | JavaScriptCore | IOS7.0+
IOS(WKwebview) | evaluateJavaScript:javaScriptString | iOS8.0+
URL拦截 & 执行JS是 安卓和IOS比较通用且兼容性较好的方案
H5和NA通信方面,最简单直接的思路是:NA拦截H5的URL获取消息(一般是通过修改iframe的src来实现 ①),经过业务处理,NA执行JS(在H5侧提前注册好的全局方法③)回调通知H5
<body>
<div class="content">XXXXX</div>
</body>
<script>
// ① 注册全局函数,以便端调用
window.setAllContent = function(){
}
// ② 通用方法函数
var sendschema = function(action,param){
let tempnode = document.createElement('iframe');
tempnode.src = "bdnews://"+action+param;
}
// ③ H5逻辑开始 运行函数
document.addEventListener("DOMContentLoaded",function(){
sendschema('load_finish');
},false);
</script>