iOS-获取当前网页的 url 和 title 和 html_ios 获取wkwebview当前加载的地址-程序员宅基地

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,发生其它行为。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/haoeyoyo/article/details/52051897

智能推荐

Gerry版网页爬虫V0.01(Java语言版本)-程序员宅基地

文章浏览阅读111次。import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import ..._gerry .net

TensorFlow安装教程-程序员宅基地

文章浏览阅读6w次,点赞21次,收藏109次。本文介绍TensorFlow在Linux系统上的安装方法。_tensorflow安装教程

Swift开发第九篇——Any和AnyObject&typealias和泛型接口-程序员宅基地

文章浏览阅读195次。本篇分为两部分:一、Swift中的Any和AnyObject二、Swift中的typealias和泛型接口一、Swift中的Any和AnyObject  在 Swift 中,AnyObject 可以代表任何 class 类型的实例,Any 可以表示任意类型,包括方法(func)类型,相当于 OC 中的 id。因为 id 可以为空,所以 AnyObj..._swift开发,[[any]] = []

L1-014. 简单题_输出事实this-程序员宅基地

文章浏览阅读3.1w次。https://www.patest.cn/contests/gplt/L1-014这次真的没骗你 —— 这道超级简单的题目没有任何输入。你只需要在一行中输出事实:“This is a simple problem.”就可以了。#include &lt;iostream&gt;#include &lt;cstdio&gt;using namespace std;int main(){..._输出事实this

Multipathd Daemon was Unable to Set Options "fast_io_fail_tmo" or "dev_loss_tmo" Under UEK1 or RHCK_multipath rport failed to read dev_loss_tmo value -程序员宅基地

文章浏览阅读421次。Multipathd Daemon was Unable to Set Options "fast_io_fail_tmo" or "dev_loss_tmo" Under UEK1 or RHCK (文档 ID 1678794.1) APPLIES TO:Linux OS - Version Oracle Linux 5.7 with Unbreakable Enterprise Ker..._multipath rport failed to read dev_loss_tmo value error 2

Jython_Jython Development Tools (JyDT) for Eclipse_jythontools-程序员宅基地

文章浏览阅读729次。Installing JyDTThis section describes how to install JyDT by connecting to the JyDT update siteon the internet. If you have downloaded an update site to a computer on your network, please follow the_jythontools

随便推点

安装Anaconda_anaconda安装pytorch环境 environment location: c:\users-程序员宅基地

文章浏览阅读1.2k次。遗留问题:环境目录 Anaconda安装路径默认了,装在了C盘,环境目录也默认在了C:\Users\dell\.conda\envs配置库的时候,该环境占用空间接近1G,会对后续计算有什么影响?一、Anaconda安装时出现的问题和目前解决方式Anaconda自带Python 3.7.61.1 CMD中Warning,环境未激活暂时解决:CMD中输入 conda info --envs,enter,activate base就正常了但是,不影响Jupyter和Sp..._anaconda安装pytorch环境 environment location: c:\users\dell\.conda\envs\

HTML富文本编辑器wangEditor的使用_wangeditor html本地引用-程序员宅基地

文章浏览阅读4.6k次,点赞3次,收藏10次。HTML富文本编辑器wangEditor的使用官网http://www.wangeditor.com/用法官方文档已经讲得很清楚了,我这里只贴出代码,方便以后自己粘贴复制用用到的CSSwangEditor-fullscreen-plugin.css@CHARSET "UTF-8";.w-e-toolbar { flex-wrap: wrap; -webkit-box-lin..._wangeditor html本地引用

Apache+nagix使用Lnmpa创建一个新的站点_lnmpa架构-程序员宅基地

文章浏览阅读476次。我们在部署服务器的时候通常会遇到需要分域名和分应用部署,那么如何通过Apache+nagix创建一个新的站点服务呢LNMPA这种架构有什么优势?LNMPA使用Nginx作为前端服务能够更快更及时的静态页面、js、图片等,当客户端请求访问动态页面时由Nginx的反向代理给Apache处理,Apache处理完再交予Nginx返回给客户端。采用LNMPA能够更好的解决LNMP架构中由于PHP..._lnmpa架构

Android Native代码中的status_t定义-程序员宅基地

文章浏览阅读8.2k次。定义在Android/system/core/include/utils/Errors.h中,小提示,Android代码中遇到的symbol,既不是Linux中提供的定义,使用source insight又找不到的情况下,可以去Android/system/core/include/目录找找,可能会有意想不到的收获哦。定义如下:1/*2 * Copyright (C) 2007 The..._status_t

homework-09-程序员宅基地

文章浏览阅读53次。0 需求这次作业需要实现一个动态求解过程展示,在homework2里我们已经实现了对一维/二维矩阵的最大子矩阵和求解,并且能支持-h和-v(本次作业中没要求-a吧?)。程序需要再支持单步执行和自动执行,并且要有随机生成测试数据的功能。对于求解的每一步都用直观的图形展示。1 分析由于网页展示有加分,所以选择在网页上实现。稍微分析了一下,觉得网页实现大概有这三种形式:..._编写程序,程序名称命名为 homework4-1.c,程序要实现如下功自 编

树、二叉树、堆-程序员宅基地

文章浏览阅读256次。一、树树和图的区别:上面这个例子中左边的是一棵树,而右边的是一个图。因为左边的没有回路,而右边的存在1->2->5->3->1这样的回路。1、正是因为树有着“不包含回路”这个特点,所以树就被赋予了很多特性。2、一棵树中的任意两个结点有且仅有唯一的一条路径连通。3、一棵树如果有n个结点,那么它一定恰好有n-1条边。在一棵树中加一条边将会构成一个回路。树这个特殊的数据结构在哪里会用到呢?比如足球世界杯的晋级图,家族的族谱图、公司的组织结构图、书的目录、我们用的操作系统Win