如何仅加载请求的 UIWebView url 的特定部分?

Posted

技术标签:

【中文标题】如何仅加载请求的 UIWebView url 的特定部分?【英文标题】:How to load only a specific section of a requested UIWebView url? 【发布时间】:2012-12-05 04:20:59 【问题描述】:

我正在为本地企业创建应用程序,但他们让我很痛苦,因为他们不会也不会创建 iPhone 友好的网页。他们反而要求我只加载网页的特定部分。

有没有办法通过指定用户可以导航的网页的唯一允许坐标来做到这一点?他们希望我只显示几个 html 表格,并希望他们桌面网页的其余部分与链接等不被用户看到。他们的要求对我来说似乎有点“骇人听闻”,但我感谢提供的任何帮助。

【问题讨论】:

【参考方案1】:
-(void)viewDidAppear:(BOOL)animated


   NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://***.com/questions/13716234/how-to-load-only-a-specific-section-of-a-requested-uiwebview-url"] encoding:NSASCIIStringEncoding error:nil];

   NSLog(@"CNN String is %@",string);


   [self.wv loadHTMLString:string baseURL:nil];

   [self.wv setDelegate:self];


-(void)webViewDidFinishLoad:(UIWebView *)webView


   NSString *testString = [self.wv stringByEvaluatingjavascriptFromString:@"document.getElementById(\"nav-tags\").innerHTML;"];

   NSLog(@"Test String is %@",testString);

如果您输入此代码,您将看到“标签”作为输出。使用正确的 id 对您的设备执行相同的操作。

【讨论】:

那么如何将过滤后的 div id 显示回 webview 中? 你总是可以在另一个网页视图中显示它,或者用 标签包裹它。 我尝试了代码,但是当我在 webViewDidFinishLoad 中调用 NSString *testString = [self.wv stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"nav-tags\").innerHTML;"]; [self.webView loadHTMLString:testString baseURL:nil]; 时,webView 被抛出一个永无止境的加载循环。 不,您正在将其加载回同一个 Web 视图中,这就是为什么存在这个无限循环的原因。创建另一个 Web 视图和 wv2,并且不要将视图控制器作为其委托。这样新的 wv2 将加载内容并且不会调用委托方法。 谢谢!我让它工作得很好,但我现在唯一的问题是当我点击刷新按钮时,页面没有刷新,我只是得到一个空白页面。【参考方案2】:

我个人会通过在 php.ini 中创建应用程序部分来解决这个问题。因此,给定页面可能会进行多次 RESTful ajax 调用以将内容加载到单独的 JavaScript 视图控制器。

【讨论】:

这一切都需要在应用端完成,因为他们不愿意改变他们的网站或服务器。 哈。祝你好运。听起来您前面有一些有趣的 XML 解析。【参考方案3】:

您可以使用下载整个网页并使用组合技巧(如正则表达式等)来获取您想要的网页部分。

如果 html 页面使用 css 并且将部分创建为带有 id 的 div,那将是最简单的。这将使您的工作变得轻松。

但是,这并不容易维护,因为一旦更改网页,您的代码可能会中断。在 firefox 中使用 firebug 或其他一些插件并确定要显示的部分,然后着手找出解决方案。您还可以使用 javascript 获取 dom 元素并在 UIWebview 中显示它们。

【讨论】:

所以我需要先请求给定的 url,将其存储为 NSString,然后根据我选择的标签中的内容提取我需要的内容,例如 和然后将其输入 UIWebView? 请先查网站,看html源码。他们很有可能使用 div id。在这种情况下,这将比您必须使用常规 html 标签容易得多,因为到处都有相同的标签。事实上,如果他们使用常规的 XHTML 兼容页面,XML 解析可以为您提供所需的内容,但大多数 html 页面不是严格的 XML,如果不是严格的 XML,您的 NSXMLParser 将失败。在不知道问题严重程度的情况下很难提出解决方案。 好的,我认为这是个好消息,但我需要“解析”的部分包含在一个名为:<div id="ctl_ctl_cphBody_cphCenter_divHtml"> 的唯一 div id 中,问题是,我需要做什么来实现? 我无法立即为您提供解决方案,但如果您研究如何从 Objective C 执行 Javascript,您将能够正确地得到它。还了解如何将您的 javascript 注入网页并执行它。然后这很容易,因为您需要做的就是在正确的层次结构中获取对象,或者 document.getElementByID ...等等。我做到了,但没有代码可以帮助您。 我刚刚用代码添加了另一个答案。只需创建一个示例视图控制器,将一个 webview 放在一个 nib 中,然后将上面的代码放入其中。

以上是关于如何仅加载请求的 UIWebView url 的特定部分?的主要内容,如果未能解决你的问题,请参考以下文章

在调用 UIWebView 的 loadHTMLString 时拦截和修改资源/url 请求

如何在 iOS 中使用 UIWebView 从 url 修改内容加载?

UITableViewCell 中的 UIWebview

我如何只加载网页的正文

uiwebview加载中文URL

如何仅在给定帧中限制 UIWebView 中的视频播放