UIWebView:在Safari中打开一些链接,在视图中打开一些链接

时间:2010-09-06 11:16:05

标签: iphone objective-c cocoa-touch uiwebview

我的应用程序的特色内容(出于文本格式的原因)在UIWebView中显示。在内容中有链接,其中一些应该在移动Safari中打开他们的目标,而其他链接应该在内容中导航。

到目前为止,我已经使用UIWebView委托捕获了链接请求。在我的实施

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

我会使用lastPathComponentpathComponents检查请求网址,以了解是否在外部或视图内打开链接。

然而,我刚刚发现所述方法仅在iOS 4.0之后才可用,这会使应用程序在iPad上无用。另外,我感觉我在这里使用了一个肮脏的解决方案。

是否有另一种方式以某种方式“标记”我的内容中的链接,以便以后在委托方法中处理请求时更容易区分?

非常感谢!!

2 个答案:

答案 0 :(得分:1)

您应该设置Web视图的策略委托: 例如,在包含Web视图的控制器中

[webView setPolicyDelegate:self];

然后覆盖decisionPolicyForNavigation方法(这只是一个例子):

- (void)webView:(WebView *)sender decidePolicyForNavigationAction: (NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id <WebPolicyDecisionListener>)listener
{       
    if ([[actionInformation objectForKey:WebActionNavigationTypeKey] intValue]  == WebNavigationTypeLinkClicked) {
        [listener ignore];
        [[NSWorkspace sharedWorkspace] openURL:[request URL]];
    }
    else
        [listener use];
}

你可以区分那种链接并忽略或使用监听器。如果你忽略它,你可以在safari中打开链接,如果你使用它,链接将在你的网页浏览中打开。

HTH

答案 1 :(得分:1)

您可以将网址请求转换为字符串,然后对网站上的子目录进行比较,例如在仅以“http://www.sample.com/myapp/myappswebcontent/”开头的网址中对网址的初始子字符串进行比较。还有别的,发送到Safari。