基于UIWebview加载html代码 并获取标签

 最近项目由于工期紧张需要有pc端设计两个界面,移动端加载界面。(本来是用JS做交互 但是公司觉得麻烦,所以直接让我用UIWebView加载)。

 需求:加载html界面 但是需要跳转界面,和用原生写的一样。

 分析:当用UIWebView加载网页时,当点击链接时,捕获链接 然后 再根据链接实行跳转。

 开始录入代码:

 1、创建UIWebViiew:

 //创建

 UIWebView * GMWebView;

//绘制页面 

    GMWebView = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight-64-44-49)];

    GMWebView.delegate = self;

    [self.view addSubview:GMWebView];    

    NSURL * gmUrl = [NSURL URLWithString:_governMentUrl];

//    NSURL * gmUrl = [NSURL URLWithString:@"https://www.baidu.com"];

    NSURLRequest * request = [NSURLRequest requestWithURL:gmUrl];

    [GMWebView loadRequest:request];

    [[JLJTools shareInstance] ShowWithString:@"加载中..."];(ps:项目中自己定义的UIProgressHUD)

 2、实现UIWebView的代理方法

    

@optional

// 如果返回NO,代表不允许加载这个请求  返回YES 代表允许加载这个请求

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

//UIWebView开始加载

- (void)webViewDidStartLoad:(UIWebView *)webView;

//UIWebView加载完成

- (void)webViewDidFinishLoad:(UIWebView *)webView;

//UIWebView加载失败

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

@end

 PS:这个地方重点。当时我们时模仿原生的 跳页之后加载新的html代码 不是在当页加载 所以shouldStartLoadWithRequest这个方法会在你点击的时候加载一次 你跳进新的界面有加载了一次。但是两次加载的内容是不一样的,这个地方注意一下。我的解决办法是这样的设置一个BOOL变量,当第一次点击去是加载,第二次加载(跳出的加载)就不走了。

实现方法:

#pragma mark --- 添加UIWebView的代理方法

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

{

    if (!isTimes) {

        isTimes = YES;

        return YES;

    }else{

        

        NSURL *url = [request URL];(ps:获取到的url 一般是本地的链接)

        FDLog(@"点击的链接%@",url);

        [self pushToDetailViewController:url];        

        return NO;

    }

}

/**

 UIWebView 的代理方法(已经开始加载)

 @param webView webView 创建的WebView

 */

- (void)webViewDidStartLoad:(UIWebView *)webView{

   

    FDLog(@"点击的链接  执行的顺序");


}

/**

 UIWebView 的代理方法(已经加载完成)

 @param webView webView 创建的WebView

 */

- (void)webViewDidFinishLoad:(UIWebView *)webView{

     [[JLJTools shareInstance] dismissSVProgressHUD];

    FDLog(@"点击的链接  执行的顺序");

   

}。

/**

 跳转到详情界面

 @param detailUrl detailUrl 跳转到

 */

- (void)pushToDetailViewController:(NSURL*)detailUrl;

{

    JLJGMdetailController * GMdetailVC = [[JLJGMdetailController alloc]init];

    GMdetailVC.detailUrl = detailUrl;

    [self.navigationController pushViewController:GMdetailVC animated:YES];

}


这基本实现了 捕获url 进行自己跳页。


3、截取url和标签

 由于要用到分享 所以要获取 这个html页面的title、url和Image 所以:

 注意要在加载完成操作:

/**

 UIWebView 的代理方法(已经加载完成)

 @param webView webView 创建的WebView

 */

- (void)webViewDidFinishLoad:(UIWebView *)webView{

    [[JLJTools shareInstance] dismissSVProgressHUD];

    //分享时需要的题目

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

    //界面上的题目

    NSString * titleString = [GMDetailView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"app-title\").innerText"];

    //图片地址

    NSString * ImgString = [GMDetailView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"app-title\").getAttribute(\"data-shareimg\")"];

    NSLog(@"网页端的名字~~%@~~%@,~~%@",ImgString,titleString,title);

    //设置导航栏的名字

    self.title = titleString;

    //分享需要的题目 图片

    detailTitle = title;

    shareImg = ImgString;

    

}

这样就获取到了。可以分享了。

 其实还有很多的获取html标签的方法:

 参考的代码:http://blog.sina.com.cn/s/blog_b8e97683010183lz.html


感谢诸君,其实也是为了自己总结一下,小码农要不断的总结经验和教训。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值