快速的方法是前端JS判断当前浏览器来分别调用安卓和IOS提供需要执行的方法,这里用到的方式是:
安卓:addJavascriptInterface方式
forum_context.addJavascriptInterface(AndroidtoJs(this), "AddNoticeAndroid")
// 继承自Object类
public class AndroidtoJs extends Object {
BaseActivity activity;
public AndroidtoJs(BaseActivity activity) {
this.activity=activity;
}
// 定义JS需要调用的方法
// 被JS调用的方法必须加入@JavascriptInterface注解
@JavascriptInterface
public void callSendSuc() {
activity.setResult(5000);
activity.finish();
}
}
IOS:WKWebView的MessageHandler
if (message.name isEqualToString:@"callSendSuc"]) {
if([message.body isEqualToString:@"success"]){
//成功时执行
} else if ([message.body isEqualToString:@"fail"]){
//失败时执行
}
NSLog(@"%@",message.body);
}
前端:
config = {
"isAndroid": /Android/i.test(navigator.userAgent),//判断是否为移动端
"isIOS": !!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)//判断是否为IOS
};
//请求的的回调方法
function callback(r) {
if (r) {
/**
* H5事件回调
* @type IOS wkwebview
*/
alert('新建成功');
/**
* 安卓事件回调
* @type Android webview
* @function addJavascriptInterface安卓所使用的交互方式
* @memberof AddNoticeAndroid
*/
window.config.isAndroid && AddNoticeAndroid.callSendSuc();
/**
* IOS事件回调
* @type IOS wkwebview
*/
if (window.config.isIOS) {
try{window.webkit.messageHandlers.callSendSuc.postMessage("IOS方法名");}catch (e){};
}
}
}