iOS-获取当前网页的 url 和 title 和 html

本文详细介绍了在iOS应用中如何使用UIWebView获取当前加载网页的URL、标题和HTML内容,并通过正则表达式去除HTML标签,获取纯文本。同时,探讨了如何拦截UIWebView上的按钮点击事件,避免其默认加载行为,转而使用Safari打开链接,以减少内存消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS-获取当前网页的 url 和 title 和 html

.h文件

@property (strong,nonatomic)UIWebView *webView;  
@property (strong,nonatomic)NSString *currentURL;  
@property (strong,nonatomic)NSString *currentTitle;  
@property (strong,nonatomic)NSString *currentHTML;  

.m文件

-(void) webViewDidFinishLoad:(UIWebView *)webView {  
   [UIApplication sharedApplication].networkActivityIndicatorVisible =NO;  
   self.title =  [webView stringByEvaluatingJavaScriptFromString:@"document.title"];//获取当前页面的title  

  self.currentURL = webView.request.URL.absoluteString;  
   NSLog(@"title-%@--url-%@--",self.title,self.currentURL);  

  NSString *lJs = @"document.documentElement.innerHTML";//获取当前网页的html  
  self.currentHTML = [webView stringByEvaluatingJavaScriptFromString:lJs];  
}

iOS使用正则表达式去掉html中的标签元素,获得纯文本

//content是根据网址获得的网页源码字符串

NSRegularExpression *regularExpretion=[NSRegularExpression regularExpressionWithPattern:@"<[^>]*>|\n"
                                                                                   options:0
                                                                                     error:nil];

//替换所有html和换行匹配元素为"-"

   content=[regularExpretion stringByReplacingMatchesInString:content 
                                                                         options:NSMatchingReportProgress 
                                                                            range:NSMakeRange(0, content.length) withTemplate:@"-"];

//把多个"-"匹配为一个"-"

   regularExpretion=[NSRegularExpression regularExpressionWithPattern:@"-{1,}" options:0 error:nil] ;
   content=[regularExpretion stringByReplacingMatchesInString:content
                                                                                     options:NSMatchingReportProgress 
                                                                                        range:NSMakeRange(0, content.length) withTemplate:@"-"];

//根据"-"分割到数组

   NSArray *arr=[NSArray array];
   content=[NSString stringWithString:content];
   arr =  [content componentsSeparatedByString:@"-"];
   NSMutableArray *marr=[NSMutableArray arrayWithArray:arr];
   [marr removeObject:@""];
   return  marr;

iOS 获取UIWebView上面的按钮点击事件

很多文章都说iOS的UIWebView比较耗内存,在我的项目中,最开始我也是用UIWebView来加载网页的。刚开始加载的是自己拼接成的Html,后来在Html中加入一个按钮,点击之后用当前的UIWebView去加载网络上的网页。程序跑起来发现非常耗内存,加载几个网上的网页之后就爆内存警告了,不处理的话很容易被评估拒掉app。后来就改成用系统的safari浏览器来打开网络上的网页,把着耗内存的工作交给苹果自己自带的浏览器来处理,就避免了我这个app crash。但是怎么获取网页上这个按钮点击的事件呢,这个按钮本身就绑定了一个url,怎么让它点击之后当前的UIWebView不去load这个url呢。

后来查了一下资料,发现UIWebView的协议里面有这么个方法,可以获取它加载的网页上面的事件,比如单击了图片,单击了按钮等等。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
//判断是否是单击
   if (navigationType == UIWebViewNavigationTypeLinkClicked)
   {
       NSURL *url = [request URL];
       if([[UIApplication sharedApplication]canOpenURL:url])
       {
           [[UIApplication sharedApplication]openURL:url];
       }
       return NO;
   }
   return YES;
}

拼接的Html最后加的按钮的方法如下:

这样写了之后,点击按钮之后就不会用当前的UIWebView来加载网络上的网页,而是调用系统的Safari来打开。

注意:最后一点要返回YES,否则UIWebView刚开始将一片空白,这是因为第一次加载的时候也是UIWebView请求一个链接,如果返回NO,就不会去加载了。还可以对url的内容进行判断,看是什么请求。

接口,如果为webView添加了delegate对象并实现该接口,那么在webView加载任何一个frame之前都会delegate对象的该方法,该方法的返回值用以控制是否允许加载目标链接页面的内容,返回YES将直接加载内容,NO则反之。并且UIWebViewNavigationType枚举,定义了页面中用户行为的分类,包括

  1. UIWebViewNavigationTypeLinkClicked,用户触击了一个链接。
  2. UIWebViewNavigationTypeFormSubmitted,用户提交了一个表单。
  3. UIWebViewNavigationTypeBackForward,用户触击前进或返回按钮。
  4. UIWebViewNavigationTypeReload,用户触击重新加载的按钮。
  5. UIWebViewNavigationTypeFormResubmitted,用户重复提交表单
  6. UIWebViewNavigationTypeOther,发生其它行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值