【发布时间】:2010-11-11 23:20:12
【问题描述】:
我正在构建一个应用程序,它将向用户显示一些时事通讯。时事通讯显示在 uiWebView 中。我正在阅读来自 rss 提要的时事通讯的网址。我解析 xml,在表格视图中我有所有的时事通讯。单击单元格时,将推送 uiWebView 并加载时事通讯。因为 uiWebView 没有打开具有 target=_blank 的链接,所以我需要将目标中的 _blank 替换为“”。在 NSOperation 中,我下载了 html 的内容,下载完成后,我替换了这样的字符串:
NSMutableString *page = [[[NSMutableString alloc] initWithData:pageData encoding:NSISOLatin1StringEncoding] autorelease]; [page replaceOccurrencesOfString:@"target=_blank" withString:@"target=""" options:0 range:NSMakeRange(0, [page length])];
完成此操作后,我将解析后的字符串加载到 webView 中以将其显示给用户。
[myWebView loadHTMLString:page baseURL:[NSURL URLWithString:@""]];
当 NSOperation 正在下载页面内容时,会显示一个带有活动指示器和标签的 HUD,显示正在加载。下载完成后,HUD 将从超级视图中移除。
到目前为止一切都很好..但是问题来了。我将 NSOperation 与回调函数一起使用,因为我无法确定对 webDidFinishLoading 的最后一次调用(我读过这个 UIWebView - How to identify the "last" webViewDidFinishLoad message? - 这是我的问题的一部分,但响应是使用一些 Apple 私有类,这是一个我的问题)。所以我这样做:
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = request.URL;
NSString *urlString = url.absoluteString;
NSLog(@"WebViewSouldStartWithRequest: %@", urlString);
if (navigationType == UIWebViewNavigationTypeLinkClicked)
{
if(![urlString isEqualToString:@"about:blank"])
{
NSLog(@"FeedViewController: startPageLoad");
activityHud = [[HUDView alloc] initWithFrame:CGRectMake(110, 100, 80, 80)];
[activityHud setText:@"Loading"];
[myWebView addSubview:activityHud];
NSLog(@"FeedViewController: pageUrl = %@", urlString);
[self resetWebView];
[urlLoader loadPageFromUrl:request.URL withCallbackTarget:self withCallbackSelector:@selector(endLoading:)];
}
}
return NO;
}
- (void) endLoading:(NSMutableString *)page { [self resetWebView]; NSLog(@"FeedViewController: endLoading"); [activityHud removeFromSuperview]; [myWebView loadHTMLString:page baseURL:[NSURL URLWithString:@""]]; }
在我触摸表格视图中的一个单元格并显示时事通讯后,它看起来应该显示,当我单击时事通讯中的链接时,页面加载了新请求,已解析但视觉上看起来不应该(我在 NSLog 中解析后查看了该页面,它具有 css 样式和 html 标签、头部、主体打开和关闭正确)有人遇到过 uiWebView 的这个问题,没有正确显示网页吗?
我尝试使用- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType{ return YES; } 加载页面
在 - (void)webViewDidFinishLoad:(UIWebView *)webview {} 和 - webViewDiStartLoad
但是对于加载到 webview 中的每个项目都会调用这些方法,因此在这些方法中显示和隐藏 HUD 并不是一个好的解决方案。
我在使用时遇到了一些问题 - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { ... return NO }
例如,具有类似 /bilder-galerien 路径的链接无法正常工作,并且在 NSLog 中我会为他们收到此文件
未知方案,什么都不做: /图片画廊
但是当我使用时
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { return Yes } 和 didstartLoading 和 finishLoading 加载了 url,我不知道为什么...李>
另一个问题是特殊的德语字符。在我第一次加载时(在 uiTableView 中按下一个单元格后)页面被解析为应该由 uiWebView 但在我单击链接并加载相应的请求后字符解析不正确..
谁能指出我正确的方向?提前谢谢你
【问题讨论】:
-
不要一遍又一遍地回答你自己的问题!
-
@SK9:删除了答案..但如果可以的话,下次请提供问题的答案!
标签: iphone html string uiwebview parsing