是否可以读取已加载到的网页的原始HTML内容UIWebView
?
如果没有,是否有另一种方法从iPhone SDK中的网页(例如.NET的等价物WebClient::openRead
)中提取原始HTML内容?
第二个问题实际上更容易回答.查看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类引用
如果要提取已加载的UIWebView,-stringByEvaluatingJavaScriptFromString的内容.例如:
NSString *html = [webView stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];
要获取整个HTML原始数据(使用和
):
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
请注意,NSString stringWithContentsOfURL将报告与发出相同请求的UIWebView完全不同的用户代理字符串.因此,如果您的服务器是用户代理知道的,并根据谁要求发回不同的html,您可能无法以这种方式获得正确的结果.
另请注意,@"document.body.innerHTML"
上面提到的只会显示body标签中的内容.如果你使用,@"document.all[0].innerHTML"
你会得到头部和身体.这仍然不是UIWebView的完整内容,因为它不会取回!doctype或html标签,但它更接近.
阅读:-
NSString *html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent"]; NSLog(html);
修改:-
html = [myWebView stringByEvaluatingJavaScriptFromString: @"document.getElementById('your div id').textContent=''"];