js与native交互
UIWebView
Native调用JS,使用
stringByEvaluatingJavaScriptFromString
来解释执行js脚本。
//script即为要执行的js方法名称
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
PS:苹果推荐iOS8之后的app使用WKWebView
来代替UIWebView,同时也使用方法evaluateJavaScript:completionHandler:
来替代stringByEvaluatingJavaScriptFromString,因为会一直等待stringByEvaluatingJavaScriptFromString方法执行完毕
JS调用Native,需要通过UIWebView
拦截跳转请求并判断请求头
是否是协商好的协议头来判断是否是JS发起调用Native的请求。
- webView:shouldStartLoadWithRequest:navigationType:
function callNative{
var url = ”callNative://nslogHelloWord“
window.location.href = url;
}
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{
//callNative 为约定好的协议头,如果是,则页面不进行跳转
if ([request.URL.scheme isEqualToString:@"callNative"]) {
NSlog(@"Hello World");
return NO;
}
//不是自定义协议头,跳转页面
return YES;
}
WKWebView
苹果自iOS8、OS X 10.10推荐使用WKWebView
来代替原先的UIWebView
,WKWebView
拥有更快的加载速度和性能,更低的内存占用,同时更细致的代理分类来满足不同需要的调用。
Native调用JS,使用方法evaluateJavaScript:completionHandler:
来解释执行脚本。
//javaScriptString要执行的js方法
//completionHandler执行结束回调或者发生错误时回调
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *error))completionHandler;
JS调用Native,通过代理WKScriptMessageHandler来实现调用。
#import "WKWVController.h"
#import <WebKit/WebKit.h>
@interface WKWVController ()<WKUIDelegate,WKScriptMessageHandle