天天看点

【iOS】网页中调用JS与JS注入

很多应用为了节约成本,做出同时在Android与iOS上都能使用的界面,这时就要使用WebView来做。Android和IOS上都有WebView,做起来很省事。当然这时就要考虑如何在Android或iOS中实现与网页的交互。对iOS而言,包括如何在网页中调用OC,以及如何在OC中对网页进行操作。

先将网页弄到iOS项目中:

网页内容如下, 仅供测试:

[html] view plain copy

【iOS】网页中调用JS与JS注入
【iOS】网页中调用JS与JS注入
  1. <html>  
  2. <head>  
  3.     <meta xmlns="http://www.w3.org/1999/xhtml" http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  4.     <title>这是一个示例html文件</title>  
  5.     <script Type='text/javascript'>  
  6.         function clickme() {  
  7.             alert('点击按钮了!');  
  8.         }  
  9.     </script>  
  10. </head>  
  11. <body>  
  12.     <h1>OC与JS互动</h1>  
  13.     <h2>blog.csdn.net/xn4545945</h2>  
  14.     <!-- 自定义协议与OC进行交互 -->  
  15.     <a href="neng://loadUrl/blog.csdn.net">点击一下, 链接调用OC函数</a>  
  16.     <br/>  
  17.     <br/>  
  18.     <a href="http://m.baidu.com">js注入, 到baidu页面上实验</a>  
  19. </body>  
  20. </html>  

一、在OC中调用JS

最重要的方法:stringByEvaluatingJavaScriptFromString

直接上代码,说明见注释:

[objc] view plain copy

【iOS】网页中调用JS与JS注入
【iOS】网页中调用JS与JS注入
  1. - (void)webViewDidFinishLoad:(UIWebView *)webView {  
  2.     //1.OC中调用JS的文档对象. (先拼出文档对象的属性) 可以在浏览器控制台输入来进行测试  
  3.     NSLog(@"%@", [self.webView stringByEvaluatingJavaScriptFromString:@"document.title"]);  
  4.     //2.OC中调用JS的方法  
  5.     [self.webView stringByEvaluatingJavaScriptFromString:@"clickme()"];  
  6. }  

二、用超链接来调用OC中方法

步骤:

* 1. 设置 webView 的代理 < UIWebViewDelegate > * 2 . 在代理的方法 shouldStartLoadWithRequest : 中调用 . ( 该方法与网页的加载有关 ) * 方法 : 就是在网页链接中 写好自定义协议 . 然后在 OC 方法中 检查点击的链接 中是否有该协议 , 有则 做相关操作 . 代码如下: [objc] view plain copy

【iOS】网页中调用JS与JS注入
【iOS】网页中调用JS与JS注入
  1. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {  
  2.     NSLog(@"%@", request.URL.absoluteString); //可以直接拿到发送请求的网址  
  3.     NSString *urlStr = request.URL.absoluteString;  
  4.     // 格式 neng://loadUrl/blog.csdn.net  协议/方法/网址  
  5.     //判断链接中的协议头,如果是neng://, 则进行相关操作  
  6.     if ([urlStr hasPrefix:@"neng://"]) {  
  7.         //拿到除去协议头的后部  
  8.         NSString *urlContent = [urlStr substringFromIndex:[@"neng://" length]];  
  9.         NSLog(@"%@", urlContent);  
  10.         //用/来拆分字符串  
  11.         NSArray *urls = [urlContent componentsSeparatedByString:@"/"];  
  12.         NSLog(@"拆分的结果为:%@", urls);  
  13.         //取出方法名  
  14.         if (urls.count != 2) {  
  15.             return NO;  
  16.         }  
  17.         NSString *funName = [NSString stringWithFormat:@"%@:", urls[0]]; //带参数的方法,加冒号  
  18.         SEL callFun = NSSelectorFromString(funName);  
  19. //取消警告  
  20. # pragma clang diagnostic push  
  21. # pragma clang diagnostic ignored "-Warc-performSelector-leaks"  
  22.         [self performSelector:callFun withObject:urls[1]]; //将blog.csdn.net作为参数传入  
  23. # pragma clang diagnostic pop  
  24.         NSLog(@"方法名为%@, 传入参数为%@", funName, urls[1]);  
  25.         return NO;  
  26.     }  
  27.     return YES;  
  28. }  
  29. - (void)loadUrl:(NSString *)urlStr {  
  30.     NSLog(@"接收到参数: %@", urlStr);  
  31.     //跳转到指定的URL--->urlStr  
  32.     NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", urlStr]];  
  33.     NSURLRequest *request = [NSURLRequest requestWithURL:url];  
  34.     [self.webView loadRequest:request];  
  35. }  

三、JS实现注入

JS是操作网页的利器,利用好JS才能真正在应用中随心所欲的操作网页。

核心方法:stringByEvaluatingJavaScriptFromString(与第一个相同,这个是在iOS中操作JS最重要方法)

代码如下:

[objc] view plain copy

【iOS】网页中调用JS与JS注入
【iOS】网页中调用JS与JS注入
  1. - (void)jsClick {  
  2.     [self.webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"  
  3.      "script.type = 'text/javascript';"  
  4.      "script.text = \"function myFunction() { "   //定义myFunction方法  
  5.      "var field = document.getElementsByName('word')[0];"  
  6.      "field.value='WWDC2014';"  
  7.      "document.forms[0].submit();"  
  8.      "}\";"  
  9.      "document.getElementsByTagName('head')[0].appendChild(script);"];  //添加到head标签中  
  10.     [self.webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];  
  11. }  
【iOS】网页中调用JS与JS注入

附上例子源码:http://download.csdn.net/detail/xn4545945/7584575

转载请注明出处:http://blog.csdn.net/xn4545945

继续阅读