iOS下JS与原生OC互相调用
来源:互联网 发布:青岛城阳灭门案 知乎 编辑:程序博客网 时间:2024/05/16 10:12
js调用原生oc
方式一
第一种方式是用js发起一个假的url请求, 然后利用UIWebView的代理方法拦截这次请求, 然后再做相应的处理.
简单代码如下
<html> <header> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"><script type="text/javascript"> function xlShowAlert(message) { alert(message); } function loadURL(url) { var iFrame; iFrame = document.createElement("iframe"); iFrame.setAttribute("src", url); iFrame.setAttribute("style", "display:none;"); iFrame.setAttribute("height", "0px"); iFrame.setAttribute("width", "0px"); iFrame.setAttribute("frameborder", "0"); document.body.appendChild(iFrame); // 发起请求后这个iFrame就没用了,所以把它dom上移除掉 iFrame.parentNode.removeChild(iFrame); iFrame = null; } function action() { loadURL("xlAction://..."); } </script></header><body> <h2>第一种方式</h2> <br/> <button type="button" onclick="action()">Click Me!</button></body></html>
然后在项目中的控制器实现UIWebView的代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [request URL]; if ([[url scheme] isEqualToString:"Action"]) { NSArray *params = [url.query componentsSpeparateByString:@"&"]; NSMutableDictionary *tempDic = [NSMutableDictionary dictionary]; for (NSString *paramStr in params) { NSArray *dicArray = [paramStr componentsSeparatedByString:@"="]; if (dicArray.count > 1) { NSString *decodeValue = [dicArray[1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; [tempDic setObject:decodeValue forKey:dicArray[0]]; } } UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"" delegate:self cancelButtonTitle:@"" otherButtonTitles:nil]; [alertView show]; return NO; } return YES;}
方式二
首先导入JavaScriptCore库, 然后再OC中获取JS的上下文
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
然后定义好js需要调用的方法, 例如js需要调用shareAction方法:则可以在UIWebView加载url完成后, 在代理方法中添加要调用的share方法:
- (void)webViewDidFinishLoad:(UIWebView *)webView { JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; // 定义好js需要调用的方法, shareAction就是调用的shareAction方法名 context[@"shareAction"] = ^() { NSArray *args = [JSContext currentArguments]; for (JSValue *jsVal in args) { } }}
OC调用JS篇
方式一
NSString *jsStr = [NSString stringWithFormat:@"showAlert('%@')", @""];[_webView stringByEvaluatingJavaScriptFromString:jsStr];// 注意:该方法会同步返回一个字符串, 因此是一个同步方法, 可能会阻塞UI
方式二
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];NSString *textJS = @"";[context evaluateScript:textJS];
0 0
- iOS下JS与原生OC互相调用
- iOS下JS与原生OC互相调用
- iOS下JS与原生OC互相调用(总结)
- iOS下JS与原生OC互相调用
- iOS下JS与原生OC互相调用(总结)
- iOS下JS与原生OC互相调用(总结)
- iOS下JS与原生OC互相调用
- iOS下JS与原生OC互相调用
- iOS下JS与原生OC互相调用(总结)
- iOS下JS与原生OC互相调用(总结)
- iOS下JS与原生OC互相调用
- iOS下JS与OC互相调用
- iOS中JS与原生OC互相调用之JavaScriptCore
- JS与原生OC互相调用方法
- JS与原生OC互相调用
- [iOS js与oc原生互相调用] js调用oc的两种方式
- iOS下JS与OC互相调用(三)--MessageHandler
- iOS下JS与OC互相调用(四)--JavaScriptCore
- Android代码混淆规则以及使用
- 解决GAT项目Bug: 用车审批中审批人登录系统后,看不到申请人提交的单子
- RxAndroid 教程
- hibernate框架的核心对象和相关知识点
- one:AFN缓存机制- URL缓存基本概念
- iOS下JS与原生OC互相调用
- PCIe学习笔记(14)--- BARs & Base & Limit
- node.js上传并解析Excel文件
- TCP/IP五层模型之数据链路层
- 数组的一些方法属性介绍
- windows下使用MinGW+msys编译ffmpeg
- Android Dialog弹出框
- JS 中 call、apply、bind 那些事
- iBET Online Casino Malaysia Rescue Fund Bonus(casino games, iBET, iBET Online Casino, online casino