2010-10-19 89 views

回答

2

您可以实施UIWebViewDelegate协议的shouldStartLoadWithRequest方法来拦截链接点击。在该方法内部,您可以使用UIApplication的openURL方法来使URL在相应的应用程序(即用于HTTP/HTTPS的Safari)中打开。

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSURL *url = [request URL]; 

    if ([url isEqual:YOUR_HOME_URL_CONTSTANT]) 
     return YES; 

    [[UIApplication sharedApplication] openURL:url]; 

    return NO; 
} 
+0

当我实现这个时,UIWebView甚至不会启动本地内容。它仍然是空的......奇怪的事情。什么会导致这种情况?这是否也会影响[v loadRequest:request]方法? – 2010-10-19 21:31:31

+0

在此代码中,您需要检查网址以查看它是否应该在Safari中加载。例如,也许你想要以file开头的所有内容:要加载到Web视图中,在这种情况下,此方法需要返回YES。我的猜测是openURL不会打开一个文件url,并且由于NO返回,webview也不会加载它。 – Nimrod 2010-10-19 21:34:21

+0

是的,在我提供的代码片段中,所有加载请求都被推送到外部应用程序。如果您想以不同方式加载特定内容,则可以通过任何方式检查URL的属性,以确定是本地加载还是远程加载。返回值BOOL指定webView是否应该继续并尝试加载内容本身。我会用一个天真的实现来更新这个例子。 – codelark 2010-10-19 22:20:26

0

您应该实现UIWebViewDelegate的shouldStartLoadWithRequest。在这里你可以看到UIWebView何时开始加载一个URL。然后,您可以处理应该在此webView中加载的内容以及应由Safari加载的内容。

我的代码如下所示:

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType 
{ 
    if (inType != UIWebViewNavigationTypeLinkClicked) 
    { 
     //This was not a clicked link, so is probably the initial load 
     //and should be loaded in the UIWebView 
     return YES; 
    } 

    //This was a clicked link, so load using Safari 
    [[UIApplication sharedApplication] openURL:[inRequest URL]]; 

    return NO; 
} 

这里我使用UIWebViewNavigationType,以确定它是否是一个链接点击,并适当响应。

相关问题