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

来源:互联网 发布:李勇seo博客 编辑:程序博客网 时间:2024/05/24 05:13

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

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

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

 开始录入代码:

 1、创建UIWebViiew:

 //创建

 UIWebView * GMWebView;

//绘制页面 

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

    GMWebView.delegate =self;

    [self.viewaddSubview:GMWebView];    

    NSURL * gmUrl = [NSURLURLWithString:_governMentUrl];

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

    NSURLRequest * request = [NSURLRequestrequestWithURL:gmUrl];

    [GMWebViewloadRequest:request];

    [[JLJToolsshareInstance] 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;

        returnYES;

    }else{

        

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

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

        [selfpushToDetailViewController:url];        

        returnNO;

    }

}

/**

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

 @param webView webView 创建的WebView

 */

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

   

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


}

/**

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

 @param webView webView 创建的WebView

 */

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

     [[JLJToolsshareInstance] dismissSVProgressHUD];

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

   

}。

/**

 跳转到详情界面

 @param detailUrl detailUrl跳转到

 */

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

{

    JLJGMdetailController * GMdetailVC = [[JLJGMdetailControlleralloc]init];

    GMdetailVC.detailUrl = detailUrl;

    [self.navigationControllerpushViewController:GMdetailVCanimated:YES];

}


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


3、截取url和标签

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

 注意要在加载完成操作:

/**

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

 @param webView webView 创建的WebView

 */

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

    [[JLJToolsshareInstance] dismissSVProgressHUD];

    //分享时需要的题目

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

    //界面上的题目

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

    //图片地址

    NSString * ImgString = [GMDetailViewstringByEvaluatingJavaScriptFromString:@"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
原创粉丝点击