iOS7之后JavaScript与Objective-C之间的通信
2017-10-16 22:18
323 查看
iOS7之后JavaScript与Objective-C之间的通信
Js -> Native
以前传统的做法是根据url字符串来做特殊匹配,从而完成一些特定的工作譬如
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *requestString = [[request URL] absoluteString];
NSString *scheme = @"js-pingpp";
NSString *protocol = [NSString stringWithFormat:@"%@://", scheme];
if ([requestString hasPrefix:protocol]) {
//调用相应支付Api
/*do something*/
return NO;
}
return YES;
}
但是iOS7之后, iOS 7 引入了 JavaScriptCore 库,它把 WebKit 的 JavaScript 引擎用 Objective-C 封装,让JavaScript与Objective-C之间的通信变的非常简单。首先导入JavaScriptCore.framework框架, 然后
JS端:
TXBB_IOS_SDK.callPay(charge, this.success, this.cancel);
OC端:
.h中引入头文件,并实现协议和对应的方法
.m中在webViewDidFinishLoad中给context赋值,并把self指针给TXBB_IOS_SDK,JS端即可经过TXBB_IOS_SDK.callPay调用起Native方法
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
self.context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
self.context[@"TXBB_IOS_SDK"] = self;
}
#pragma mark - JSExport Methods
- (void)callPay:(NSString *)charge success:(NSString *) success cancel:(NSString *)cancel {
...
[Pingpp createPayment:charge appURLScheme:@"msc" withCompletion:completion];
}
Native -> Js
OC 端调用JS代码则只需通过context调用evaluateScript方法即可,下列代码即会用JS显示Hello World,而在iOS7.0之前你可能通过[webView stringByEvaluatingJavaScriptFromString:@"document.title"]方法来获取WebView的 title。
-(void)webViewDidFinishLoad:(UIWebView *)webView {
JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString *alertJs=@"alert('Hello Word')";
[context evaluateScript:alertJs];
}
最后
JS和OC通信还有个非常著名的第三方库WebViewJavascriptBridge,如果你的项目需要支持iOS6之前的系统,你可以通过这个项目实现JS和OC的通信。
Js -> Native
以前传统的做法是根据url字符串来做特殊匹配,从而完成一些特定的工作譬如
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *requestString = [[request URL] absoluteString];
NSString *scheme = @"js-pingpp";
NSString *protocol = [NSString stringWithFormat:@"%@://", scheme];
if ([requestString hasPrefix:protocol]) {
//调用相应支付Api
/*do something*/
return NO;
}
return YES;
}
但是iOS7之后, iOS 7 引入了 JavaScriptCore 库,它把 WebKit 的 JavaScript 引擎用 Objective-C 封装,让JavaScript与Objective-C之间的通信变的非常简单。首先导入JavaScriptCore.framework框架, 然后
JS端:
TXBB_IOS_SDK.callPay(charge, this.success, this.cancel);
OC端:
.h中引入头文件,并实现协议和对应的方法
.m中在webViewDidFinishLoad中给context赋值,并把self指针给TXBB_IOS_SDK,JS端即可经过TXBB_IOS_SDK.callPay调用起Native方法
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
self.context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
self.context[@"TXBB_IOS_SDK"] = self;
}
#pragma mark - JSExport Methods
- (void)callPay:(NSString *)charge success:(NSString *) success cancel:(NSString *)cancel {
...
[Pingpp createPayment:charge appURLScheme:@"msc" withCompletion:completion];
}
Native -> Js
OC 端调用JS代码则只需通过context调用evaluateScript方法即可,下列代码即会用JS显示Hello World,而在iOS7.0之前你可能通过[webView stringByEvaluatingJavaScriptFromString:@"document.title"]方法来获取WebView的 title。
-(void)webViewDidFinishLoad:(UIWebView *)webView {
JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString *alertJs=@"alert('Hello Word')";
[context evaluateScript:alertJs];
}
最后
JS和OC通信还有个非常著名的第三方库WebViewJavascriptBridge,如果你的项目需要支持iOS6之前的系统,你可以通过这个项目实现JS和OC的通信。
相关文章推荐
- iOS7之后JavaScript与Objective-C之间的通信
- iOS7之后JavaScript与Objective-C之间的通信
- iOS7之后JavaScript与Objective-C之间的通信
- JavaScript与Objective-C之间的通信
- JavaScript与Objective-C之间的通信
- JavaScript与Objective-C之间的通信
- JavaScript与Objective-C之间的通信
- JavaScript与Objective-C之间的通信
- Flex和JavaScript之间通信
- UIWebView 中JavaScript 与 Objective-C 通信
- iOS中Objective-C与JavaScript之间相互调用的实现(实现了与Android相同的机制)转
- android和javascript之间相互通信实例分析
- JavaScript 与 Objective-C 通信
- Javascript与Objective-C通信方法
- android和javascript之间相互通信实例分析
- Javascript常见问题及解决(二)如何实现浏览器内多个标签页之间的通信?
- android和javascript之间相互通信实例分析
- JavaScript 和 Macromedia Flash 之间的通信示例
- UIWebView 中JavaScript 与 Objective-C 通信
- objective-c与javascript的通信