iOS URL Schemes allow web sites to launch apps like so:
twitter://timeline
launches Twittergooglechrome://google.com
launches Chromefb://root
launches Facebook______________
launches Safari? (not http://
, since Safari won't launch from UIWebView
)What custom url scheme triggers Safari to launch (even from within another app's UIWebView
)?
To clarify, I'm not looking for [[UIApplication sharedApplication] openURL: request.URL];
Instead I'm looking for how a website can allow a user to launch Mobile Safari from within the UIWebView
of another app (Google Chrome, Twitter, etc.).
Example HTML links that pop open other apps:
<a href="twitter://timeline">Open Twitter</a>
<a href="googlechrome://google.com">Open site in Chrome</a>
<a href="fb://root">Open Facebook</a>
I'm looking for something similar to these non-working examples:
<a href="safari://google.com">Open Safari [Doesn't work]</a>
<a href="webkit://google.com">Open Webkit [Doesn't work]</a>
Here's a jsFiddle of the same: http://jsfiddle.net/gXLjF/9/embedded/result/
Try opening this URL in iOS Google Chrome and opening Safari with the links.
There is no Safari URL scheme. If you make one up and use it in your html you can check for it though.
Implement the UIWebViewDelegate
method webView:shouldStartLoadWithRequest:navigationType:
. Return 'NO' for the requests that you want to shunt to mobile safari. Call UIApplication
openURL
with the request's URL.
Something like this:
- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// all clicked links!
if ( navigationType == UIWebViewNavigationTypeLinkClicked )
{
[[UIApplication sharedApplication] openURL: request.URL];
return NO;
}
// or, custom URL scheme!
if ( [request.URL.scheme isEqualToString: @"my-open-in-safari"] )
{
// remap back to http. untested!
NSURL* url = [NSURL URLWithString: [request.URL.absoluteString stringByReplacingOccurrencesOfString: @"my-open-in-safari" withString: @"http" ]];
[[UIApplication sharedApplication] openURL: url];
return NO;
}
return YES;
}