Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148123
  • 博文数量: 69
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 602
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-25 20:56
文章分类

全部博文(69)

文章存档

2015年(68)

2014年(1)

我的朋友

分类: iOS平台

2015-10-08 18:05:26

*1.设置webView的代理<UIWebViewDelegate>
*2.在代理的方法shouldStartLoadWithRequest:中调用.(该方法与网页的加载有关)
*方法:就是在网页链接中写好自定义协议.然后在OC方法中检查点击的链接中是否有该协议,有则做相关操作.
代码如下:
[objc] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /**=========================== webView链接 中调用 OC===============================*/  
  2. /**webView的代理方法:加载页面有关. 当直接返回为NO时,会调用JS方法 
  3.    其中request参数与发送请求有关*/  
  4. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {  
  5.     NSLog(@"%@", request.URL.absoluteString); //可以直接拿到发送请求的网址  
  6.     NSString *urlStr = request.URL.absoluteString;  
  7.   
  8.     // 格式 neng://loadUrl/blog.csdn.net  协议/方法/网址  
  9.     //判断链接中的协议头,如果是neng://, 则进行相关操作  
  10.     if ([urlStr hasPrefix:@"neng://"]) {  
  11.         //拿到除去协议头的后部  
  12.         NSString *urlContent = [urlStr substringFromIndex:[@"neng://" length]];  
  13.         NSLog(@"%@", urlContent);  
  14.   
  15.         //用/来拆分字符串  
  16.         NSArray *urls = [urlContent componentsSeparatedByString:@"/"];  
  17.         NSLog(@"拆分的结果为:%@", urls);  
  18.   
  19.         //取出方法名  
  20.         if (urls.count != 2) {  
  21.             return NO;  
  22.         }  
  23.         NSString *funName = [NSString stringWithFormat:@"%@:", urls[0]]; //带参数的方法,加冒号  
  24.   
  25.         SEL callFun = NSSelectorFromString(funName);  
  26. //取消警告  
  27. # pragma clang diagnostic push  
  28. # pragma clang diagnostic ignored "-Warc-performSelector-leaks"  
  29.         [self performSelector:callFun withObject:urls[1]]; //将blog.csdn.net作为参数传入  
  30. # pragma clang diagnostic pop  
  31.         NSLog(@"方法名为%@, 传入参数为%@", funName, urls[1]);  
  32.   
  33.         return NO;  
  34.     }  
  35.   
  36.     return YES;  
  37. }  
  38.   
  39. - (void)loadUrl:(NSString *)urlStr {  
  40.     NSLog(@"接收到参数: %@", urlStr);  
  41.   
  42.     //跳转到指定的URL--->urlStr  
  43.     NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", urlStr]];  
  44.     NSURLRequest *request = [NSURLRequest requestWithURL:url];  
  45.   
  46.     [self.webView loadRequest:request];  
  47. }  



  UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网页元素交互。

stringByEvaluatingJavaScriptFromString

    使用stringByEvaluatingJavaScriptFromString方法,需要等UIWebView中的页面加载完成之后去调用。我们在界面上拖放一个UIWebView控件。在Load中将google mobile加载到这个控件中,代码如下:

复制代码
- (void)viewDidLoad
{
    [super viewDidLoad];
    webview.backgroundColor = [UIColor clearColor];  
    webview.scalesPageToFit =YES;
    webview.delegate =self;
    NSURL *url =[[NSURL alloc] initWithString:@" style="margin:0px;padding:0px;color:#800000;line-height:1.5 !important;">"];

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    [webview loadRequest:request];   
}
复制代码

我们在webViewDidFinishLoad方法中就可以通过javascript操作界面元素了。

1、获取当前页面的url。

- (void)webViewDidFinishLoad:(UIWebView *)webView {  
  NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"document.location.href"];
}

2、获取页面title:

- (void)webViewDidFinishLoad:(UIWebView *)webView {  
   NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"document.location.href"];

   NSString *title = [webview stringByEvaluatingJavaScriptFromString:@"document.title"]; 
}

3、修改界面元素的值。

 NSString *js_result = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByName('q')[0].value='朱祁林';"];

4、表单提交:

 NSString *js_result2 = [webView stringByEvaluatingJavaScriptFromString:@"document.forms[0].submit(); "];

这样就实现了在google搜索关键字:“朱祁林”的功能。

5、插入js代码

上面的功能我们可以封装到一个js函数中,将这个函数插入到页面上执行,代码如下:

复制代码
 [webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');" "script.type = 'text/javascript';" "script.text = \"function myFunction() { " "var field = document.getElementsByName('q')[0];" "field.value='朱祁林';" "document.forms[0].submit();" "}\";" "document.getElementsByTagName('head')[0].appendChild(script);"];   
        
        [webView stringByEvaluatingJavaScriptFromString:@"myFunction();"]; 
复制代码

看上面的代码:

a、首先通过js创建一个script的标签,type为'text/javascript'。

b、然后在这个标签中插入一段字符串,这段字符串就是一个函数:myFunction,这个函数实现google自动搜索关键字的功能。

c、然后使用stringByEvaluatingJavaScriptFromString执行myFunction函数





阅读(963) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~