h5端:
import Vue from "vue";
import utils from "@/assets/js/utils";
import { Toast } from "vant";
Vue.use(Toast);
function callApp(name, androidData, iosData) {
if (utils.judgeBrowser().android) {
if (window.JSCallJava) {
if (window.JSCallJava[name]) {
if (androidData) {
window.JSCallJava[name](androidData);
} else {
window.JSCallJava[name]();
}
}
}
} else if (utils.judgeBrowser().ios) {
if (window.webkit && window.webkit.messageHandlers) {
if (window.webkit.messageHandlers[name]) {
if (iosData) {
window.webkit.messageHandlers[name].postMessage(iosData);
} else {
window.webkit.messageHandlers[name].postMessage();
}
}
}
}
}
//约定的方法名
export function closePage() {
callApp("closePage", "", "1");
}
iOS端
#import "JNDelegateCommonWebView.h"
#import <WebKit/WebKit.h>
@interface JNDelegateCommonWebView ()<WKNavigationDelegate, WKUIDelegate,WKScriptMessageHandler>
@property (nonatomic, strong) WKWebView *web;
@end
@implementation JNDelegateCommonWebView
- (void)viewDidLoad {
[super viewDidLoad];
[self createUI];
}
-(void)createUI{
WKWebViewConfiguration *config = [WKWebViewConfiguration new];
config.userContentController = [WKUserContentController new];
//注册js方法
[config.userContentController addScriptMessageHandler:self name: @"closePage"];
self.web = [[WKWebView alloc]initWithFrame:CGRectZero configuration:config];
_web.navigationDelegate = self;
[self.view addSubview:_web];
}
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
VLog(@"方法名:%@,传递的数据:%@",message.name,message.body);// 方法名
if ([message.name isEqualToString:@"closePage"]) {
[self.navigationController popViewControllerAnimated:YES];
}
}
@end