views:

184

answers:

1

Hi everyone..

I have a webpage in uiwebview.. On this page are a couple of http:// links. One of them I want to have it opened in safari. The rest can open in UIWebview. I used this code so far;

- (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;  
} 

This works fine for the http and https etc. My idea was to make ONE of the links of the website point to safari://blah.com and change the above code to;

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

Hoping this would open the safari:// url in safari and the rest in UIWebview. But no luck. It seems like only the standard stuff (like http https tel mailto and sms) work here. Any ideas how to get around this?

A: 

Hoping this would open the safari:// url in safari and the rest in UIWebview. But no luck.

Here you don't say exactly why it doesn't work. Can you provide more detail -- what did you try, what did you expect, and what happened instead?

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

This code is unnecessary (you don't need to retain that object) and produces a memory leak (traveling the code path that enters the first if statement and returns)

// Auto release

This comment is misleading as you are not using autorelease in your code.

Your code also is also a [ ( ( [ [ bit ] hard ] to ) read ) with ( all ) [ [ those ] brackets ] and ( spaces ) ] Don't use "code" or "pre" tags to format code -- use the "101 010" button to format instead. I've fixed it up a little bit for you

Shaggy Frog
Sorry about the messy code.. been trying for 3 hours, but no luck.When I say it doesn't work I mean the links with http:// get opened in uiwebview, the links with safari:// don't do anything when clicked. My goal is to have those links opened in safari.
Alex van Es
So do the links with safari:// trigger this method at all?
Shaggy Frog
No, this method only seems to work with http: and https:.. seems like you cannot add your own type like safari://
Alex van Es