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?
I needed to do the same thing, and used the code above as a starting point for my solution. The problem of safari:// links not opening is that it's not really a valid scheme, and needs to be changed to http:// first. Hope this helps anyone who needs to do this.
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?
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 andreturn
s)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