可以读取加载到UIWebView中的网页的原始HTML内容吗?

如果没有,有没有其他方法可以从iPhone SDK(例如.NETWebClient::openRead的类似功能)的网页中提取原始HTML内容?

推荐答案

第二个问题实际上更容易回答.看看NSString的stringWithContentsOfURL:encoding:error:方法-它允许您将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将包含获取过程中遇到的任何错误.(您应该在获取之后判断error的内容.)

相反的方式(从UIWebView)有点棘手,但基本上是相同的概念.您必须将request从视图中拉出,然后像前面一样进行提取:

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

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

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

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

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

[yourWebView loadHTMLString:page baseURL:requestURL];

但是,我不确定这是否会运行加载页面中的JavaScript(方法名loadHTMLString有点模棱两可,文档对此没有太多说明).

有关更多信息,请访问:

Html相关问答推荐

为移动显示重新排序内容

HTML图像无法正确放大和缩小规模

Flexbox嵌套div溢出

如何获得一个背景图像,不是模糊的内部容器,但模糊的外部'

电话号码验证器(Angular )

如何让QML`Text`元素内的链接在悬停时显示鼠标指针?

HTML表行悬停仅适用于偶数行

<nav和button是姐妹元素.当添加了导航活动类时,我如何为按钮编写CSS?

如果最后一行的卡数少于其他行,则在使用flex grow使卡在调整大小时拉伸后,flex卡的宽度将被拉伸

网格中的图像zoom 不正确

嵌入最近的 YOUTUBE 视频(不是短片,视频)

样式化单选按钮 背景 colored颜色

动态计算高度时 Div 不保持 1/1 纵横比

如何动态调整彼此重叠的两个 div 的大小,使它们在增长时保持相同的高度

SVG 调整大小而不是溢出

Mediawiki css/html 信息框创建空白行

在身体外部创建 tanget 45° div

在 jinja 模板内的 html 表中嵌套 For 循环

如果不透明的元素出现在下方,为什么不透明度会使一个元素出现在另一个元素上方?

是否可以设置用户在联系表单中输入的文本字体的样式