2010-08-29 71 views
0

我在uiwebview中有一个网页..在这个页面上有几个http://链接。其中一个我想在safari中打开它。其余的可以在UIWebview中打开。 我到目前为止使用了这个代码;UIWebview:在safari中打开某些链接(不是全部)

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 
{ 
    NSURL *requestURL = [ [ request URL ] retain ]; 
    // Check to see what protocol/scheme the requested URL is. 
    if (([ [ requestURL scheme ] isEqualToString: @"http" ] 
    || [ [ requestURL scheme ] isEqualToString: @"https" ]) 
     && (navigationType == UIWebViewNavigationTypeLinkClicked)) { 
     return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ]; 
    } 
    // Auto release 
    [ requestURL release ]; 
    // If request url is something other than http or https it will open 
    // in UIWebView. You could also check for the other following 
    // protocols: tel, mailto and sms 
    return YES; 
} 

这工作正常HTTP和HTTPS等。我的想法是使网站点的链接之一,Safari浏览器://blah.com并更改上面的代码;

if (([ [ requestURL scheme ] isEqualToString: @"safari" ] 
|| [ [ requestURL scheme ] isEqualToString: @"https" ]) 

希望这会打开safari:// url在safari中,其余的在UIWebview中。但没有运气。 似乎只有标准的东西(如http https tel mailto和短信)在这里工作。 任何想法如何解决这个问题?

+0

我知道我们将在这里工作两年,但是您会接受我的答案,因为它有许多upvotes,实际上是解决方案吗?我可以使用我第一个接受的答案! :) – 2012-08-14 07:27:13

回答

0

希望这将打开Safari:在 的UIWebView // 网址在Safari和休息。但没有运气。

在这里,你不完全说为什么它不起作用。你能提供更多的细节 - 你尝试了什么,你期望什么,发生了什么?

NSURL *requestURL = [ [ request URL ] retain ]; 

此代码是不必要的(不需要保留该对象),并产生一个内存泄漏(行进进入第一if语句和return是代码路径)

// Auto release 

这由于您在代码中没有使用autorelease,因此评论有误导性。 (所有)[[那些]括号]和(空格)]您的代码也是一个[(([[bit] hard])不要使用“code”或“pre”标签格式化代码 - 使用“101 010”按钮进行格式化。我已经为你修复了一点点

+0

对不起有关凌乱的代码..一直在尝试3个小时,但没有运气。 当我说它不起作用,我的意思是与http://的链接在uiwebview中打开,与safari的链接://单击时不做任何事情。我的目标是让这些链接在safari中打开。 – 2010-08-29 09:25:11

+0

所以与safari的链接://触发这个方法呢? – 2010-08-29 19:22:09

+0

不,这个方法似乎只适用于http:和https:..似乎你不能像safari添加你自己的类型:// – 2010-08-30 05:44:26

4

我需要做同样的事情,并使用上面的代码作为我的解决方案的起点。 safari://链接没有打开的问题是它不是一个真正有效的方案,需要先更改为http://。希望这可以帮助任何需要这样做的人。

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

    // Make sure it's a link click that called this function. 
    if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
     NSURL *requestURL = [ request URL ]; 

     // Check to see what protocol/scheme the requested URL is. 
     if ([[requestURL scheme] isEqualToString: @"http"] || [[requestURL scheme] isEqualToString: @"https"]) { 

      // If it is HTTP or HTTPS, just return YES and the page loads. 

      return YES; 

     } else { 

      // Everything else loads here. We assume what we're dealing with is safari:// 

      // It's important to replace safari:// with http:// or it won't load anyway 
      [[ UIApplication sharedApplication ] openURL: [NSURL URLWithString: [[requestURL absoluteString] stringByReplacingOccurrencesOfString:@"safari://" withString:@"http://"] ]]; 
      return NO; 

     } 

    } else { 
     return YES; 
    } 

} 
相关问题