OC与javascript进行交互
来源:互联网 发布:python macd指标 宽距 编辑:程序博客网 时间:2024/06/10 21:21
OC与javascript进行交互
由于H5具有跨平台的优势,在很多情况下可能会使用到,但是对于混编有时候会是必要的。
1> 使用OC调用javascript代码
首先要了解一下web的加载;
在OC中,加载网页的控件是UIWebView;
一般我们需要做的是先加载原来的Web,然后再进行处理,这样的话,就会用到UIWebView的代理方法。
// 这个方法是网页加载完毕之后进行调用- (void)webViewDidFinishLoad:(UIWebView *)webView;
当网页加载完毕之后,就可以很轻松的拿到当前加载网页的<body>,这样的话我们就可以通过执行js代码进行处理原来的网页
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML;"];
通过上面这个方法可以获得网页的结构,在自己不确定网页结构的情况下,可以打印出来看一下,这样就可以很容易找到自己要处理的内容。
然后执行js代码,可以通过下面的方法进行加载js代码,
- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
要注意的是参数是字符串,所以我们需要把代码包装在字符串里面
NSMutableString *js = [NSMutableString stringWithString:@"这里写js代码"];
多行js代码之间可以使用反斜线(\)连接。举个栗子:
NSMutableString *js = [NSMutableString stringWithString:@"\ var footer = document.getElementsByTagName('footer')[0];\ footer.parentNode.removeChild(footer);\ var header = document.getElementsByTagName('header')[0];\ header.parentNode.removeChild(header);\ "];
然后执行js
[webView stringByEvaluatingJavaScriptFromString:js];
这样就可以将自己添加的js添加到加载到得网页中。
2>使用JS调用OC的代码
使用JS调用OC并非像上面的那么简单.这里会使用UIWebView的另外的一个代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
上面这个方法在每次进行加载网页的时候都会执行,可以监听每一次webView发送的请求,如果返回值是 YES, 则说明可以进行加载网页, 如果返回的是 NO, 则说明禁止加载该网页.
那这个方法应该怎么使用呢?
因为在JS中无法直接调用OC的方法,我们的思路是将js中的事件转化成自定义的一种协议,当执行协议时,webView的代理方法进行监听,如果自己需要的方法,则可以执行OC方法.
下面看了一段HTML代码
<body> <div> <button onclick="fn_click();">按钮1</button> </div><script type="text/javascript"> function fn_click() { // 自定义协议,进行动态跳转 window.location.href = 'dz://click'; }</script></body>
然后对网页进行监听
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSString *url = request.URL.absoluteString; // 判断请求是否是自定义的,如果是自定义的,则进行处理 NSRange range = [url rangeOfString:@"dz://"]; NSUInteger loc = range.location; if (loc != NSNotFound) { NSString *method = [url substringFromIndex:loc + range.length]; // 取出JS方法的方法名 SEL sel = NSSelectorFromString(method); // 将JS方法名转化为OC的方法名 [self performSelector:sel withObject:nil]; } return YES;}
通过上面的一段代码,就可以在OC中调用JS方法。
- (void)click { NSLog(@“点击了btn”);}
0 0
- OC与javascript进行交互
- JavaScript与OC的交互
- JavaScript--关键字与标识符oc交互
- iOS7 OC与和JavaScript交互
- JavaScript和OC交互
- UIViewController与UIWebView通过JavaScript进行交互
- OC与JavaScript交互学习过程中的资料整理
- oc与js 交互
- oc与js交互
- JS与OC交互
- js与oc 交互
- OC与JS交互
- OC与JS交互
- OC与JS交互
- OC与JS交互
- OC 与JS 交互
- oc与h5交互
- OC与JS交互
- Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI
- mysql 导入数据 Got a packet bigger than ‘max_allowed_packet’ bytes的解决方法
- The Flash
- Java 性能优化
- WGS84、GCJ-02(火星坐标)、百度坐标,Web墨卡托坐标
- OC与javascript进行交互
- Android的IPC机制(二)——AIDL实现原理简析
- 嵌入式操作系统内核原理和开发(总结篇)
- 【BZOJ4145】[AMPPZ2014]The Prices【状压DP】【背包】
- Qt之表单布局(QFormLayout)
- 《c++primer 》string *pstr = new string; *pstr = str;的疑问
- Orange’s学习笔记(一)
- 春哥来了
- 在Eclipse中安装Subclipse