OC与javascript进行交互

由于H5具有跨平台的优势,在很多情况下可能会使用到,但是对于混编有时候会是必要的。

1> 使用OC调用javascript代码

首先要了解一下web的加载;

在OC中,加载网页的控件是UIWebView;

一般我们需要做的是先加载原来的Web,然后再进行处理,这样的话,就会用到UIWebView的代理方法。

// 这个方法是网页加载完毕之后进行调用- (void)webViewDidFinishLoad:(UIWebView*)webView;

当网页加载完毕之后,就可以很轻松的拿到当前加载网页的,这样的话我们就可以通过执行js代码进行处理原来的网页

NSString*html = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML;"];

通过上面这个方法可以获得网页的结构,在自己不确定网页结构的情况下,可以打印出来看一下,这样就可以很容易找到自己要处理的内容。

然后执行js代码,可以通过下面的方法进行加载js代码,

-(nullableNSString*)stringByEvaluatingJavaScriptFromString:(NSString *)script;

要注意的是参数是字符串,所以我们需要把代码包装在字符串里面

NSMutableString*js = [NSMutableStringstringWithString:@"这里写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代码

按钮1
functionfn_click(){// 自定义协议,进行动态跳转window.location.href ='dz://click';    }

然后对网页进行监听

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {NSString*url = request.URL.absoluteString;// 判断请求是否是自定义的,如果是自定义的,则进行处理NSRangerange = [url rangeOfString:@"dz://"];NSUIntegerloc = range.location;if(loc !=NSNotFound) {NSString*method = [url substringFromIndex:loc + range.length];// 取出JS方法的方法名SEL sel =NSSelectorFromString(method);// 将JS方法名转化为OC的方法名[selfperformSelector:sel withObject:nil];    }returnYES;}

通过上面的一段代码,就可以在OC中调用JS方法。

- (void)click

 {NSLog(@“点击了btn”);

}

你可能感兴趣的:(OC与javascript进行交互)