当前位置:  开发笔记 > 编程语言 > 正文

从UIWebView读取HTML内容

如何解决《从UIWebView读取HTML内容》经验,为你挑选了5个好方法。

是否可以读取已加载到的网页的原始HTML内容UIWebView

如果没有,是否有另一种方法从iPhone SDK中的网页(例如.NET的等价物WebClient::openRead)中提取原始HTML内容?



1> Tim..:

第二个问题实际上更容易回答.查看stringWithContentsOfURL:encoding:error:NSString 的方法 - 它允许您将URL作为NSURL的实例(可以很容易地从NSString实例化)传入,并返回一个字符串,其中包含该URL的页面的完整内容.例如:

NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL 
                                                encoding:NSASCIIStringEncoding
                                                   error:&error];

运行此代码后,googlePage将包含www.google.com的HTML,error并将包含fetch中遇到的任何错误.(您应该检查error获取后的内容.)

走另一条路(来自UIWebView)有点棘手,但基本上是相同的概念.您必须从视图中提取请求,然后像以前一样进行提取:

NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL 
                                          encoding:NSASCIIStringEncoding
                                             error:&error];

编辑:但是,这两种方法都会受到性能影响,因为它们会执行两次请求.您可以通过使用其stringByEvaluatingJavascriptFromString:方法从当前加载的UIWebView中获取内容来解决此问题,如下所示:

NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString: 
                                         @"document.body.innerHTML"];

这将使用文档对象模型获取视图的当前HTML内容,解析JavaScript,然后将其作为HTML的NSString*提供给您.

另一种方法是首先以编程方式执行请求,然后从您请求的内容加载UIWebView.假设您采用上面的第二个示例,即NSString *page调用的结果stringWithContentsOfURL:encoding:error:.然后,您可以使用该字符串将该字符串推送到Web视图中loadHTMLString:baseURL:,假设您还保留了所请求的NSURL:

[yourWebView loadHTMLString:page baseURL:requestURL];

但是,我不确定这是否会运行您加载的页面中发现的JavaScript(方法名称,loadHTMLString有点含糊不清,而且文档没有多说明).

欲了解更多信息:

UIWebView类引用

NSString类引用

NSURL类引用


`NSString*html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];`现在已经好几次了.它似乎尽可能从文档中返回.
事实上,有:)编辑的答案.
@Hanuman这可能会对你有所帮助:NSString*head = [yourWebView stringByEvaluatingJavaScriptFromString:@"document.head.innerHTML"]; NSString*body = [yourWebView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]; NSString*totalPage =追加两个字符串.

2> Ben Gottlieb..:

如果要提取已加载的UIWebView,-stringByEvaluatingJavaScriptFromString的内容.例如:

NSString  *html = [webView stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];


该死,这很聪明!
我遇到的问题是,如果内容恰好是JSON字符串,甚至是没有body标签的原始字符串会发生什么?

3> tuoxie007..:

要获取整个HTML原始数据(使用):

NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];



4> 小智..:

请注意,NSString stringWithContentsOfURL将报告与发出相同请求的UIWebView完全不同的用户代理字符串.因此,如果您的服务器是用户代理知道的,并根据谁要求发回不同的html,您可能无法以这种方式获得正确的结果.

另请注意,@"document.body.innerHTML"上面提到的只会显示body标签中的内容.如果你使用,@"document.all[0].innerHTML"你会得到头部和身体.这仍然不是UIWebView的完整内容,因为它不会取回!doctype或html标签,但它更接近.



5> 小智..:

阅读:-

NSString *html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent"];
NSLog(html);    

修改:-

html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent=''"];

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有