1.通过JS向APP原生传值
- (void)webViewDidFinishLoad:(UIWebView*)webView
{
CGFloat sizeHeight = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight"]floatValue];
self.webView.frame = CGRectMake(0,0,SCREEN_WIDTH, SCREEN_HEIGHT);
// 获取JS的上下文
JSContext*context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//jumpShowImagesActivity 与服务器约定好的方法名
context[@"jumpShowImagesActivity"] = ^() {
// 获取到JSContext中的参数
NSArray *args = [JSContext currentArguments];
NSString*imageUrl;
NSArray*imageArr;
for(int i = 0; i<args.count; i++){
JSValue *jsVal = args[i];
if(i==0) {
imageUrl = [jsVal toString];
}else{
imageArr = [jsVal toArray];
}
}
NSInteger index = [imageArr indexOfObject:imageUrl];
dispatch_async(dispatch_get_main_queue(), ^{
[[XLImageViewer shareInstanse] showNetImages:imageArr index:index fromImageContainer:self.view title:@[]];
});
JSValue *content = [JSContext currentThis];
NSLog(@"content为: %@",content);
};
context.exceptionHandler= ^(JSContext*context,JSValue*exceptionValue) {
context.exception= exceptionValue;
// 比如把js中的方法名改掉,OC找不到相应方法,这里就会打印异常信息
NSLog(@"异常信息:%@", exceptionValue);
};
}
2.APP向html传值 (wkwebview)
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.userContentController = [WKUserContentController new];
[configuration.userContentController addScriptMessageHandler:self name:@"jumpLogin"];
[configuration.userContentController addScriptMessageHandler:self name:@"getUserName"];
[configuration.userContentController addScriptMessageHandler:self name:@"jumpUserInfoPage"];
WKPreferences *preferences = [WKPreferences new];
preferences.javaScriptCanOpenWindowsAutomatically = YES;
preferences.javaScriptEnabled=YES;
configuration.preferences= preferences;
_webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) configuration:configuration];
_webView.UIDelegate=self;
_webView.navigationDelegate = self;
需要服务器先行注册一个方法给APP调用,然后在代理方法中实现传值
- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString*userName = [userDefaultsobjectForKey:@"KEY_USER_NAME"];
[UsergetAccount:^(NSString*username,NSString*password,NSString*token) {
NSLog(@"username:%@,password:%@,token:%@",username,password,token);
NSString* jsStr = [NSStringstringWithFormat:@"getUserName('%@,%@')",userName,password]; [self.webViewevaluateJavaScript:jsStrcompletionHandler:^(id_Nullableresult,NSError*_Nullableerror) {
NSLog(@"result=%@ error=%@",result, error);
}];
}];
}