我的应用程序的特色内容(出于文本格式的原因)在UIWebView中显示。在内容中有链接,其中一些应该在移动Safari中打开他们的目标,而其他链接应该在内容中导航。
到目前为止,我已经使用UIWebView委托捕获了链接请求。在我的实施
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
我会使用lastPathComponent
或pathComponents
检查请求网址,以了解是否在外部或视图内打开链接。
然而,我刚刚发现所述方法仅在iOS 4.0之后才可用,这会使应用程序在iPad上无用。另外,我感觉我在这里使用了一个肮脏的解决方案。
是否有另一种方式以某种方式“标记”我的内容中的链接,以便以后在委托方法中处理请求时更容易区分?
非常感谢!!
答案 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。