我可以格式化 URL 以从我的应用程序的 UIWebView 中启动 Safari 吗?
Posted
技术标签:
【中文标题】我可以格式化 URL 以从我的应用程序的 UIWebView 中启动 Safari 吗?【英文标题】:Can I format an URL to launch Safari from within my app's UIWebView? 【发布时间】:2010-12-22 00:23:37 【问题描述】:我的应用有一个 UIWebView,它显示了相当多的内容。对于其中的一些内容,我想退出应用程序,并启动 Safari 来处理 Web 内容,而不是在我的 UIWebView 中进行。是否有一种 url 格式可以显式启动 Safari 而不是在 UIWebView 中加载页面?
显然我不能使用 http://,因为它只是在适当的位置打开了 url。我可以使用 safari:// 或类似的东西吗?
编辑:抱歉,我最初并不清楚。我正在寻找一种解决方案,该解决方案涉及在不修改我的客户的情况下更改页面上的 url。希望有一个原生的 Safari 启动模式,类似于手机的 tel://。
【问题讨论】:
【参考方案1】:当然。然后让UIWebView
代表做:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSString * customScheme = @"safari";
NSURL * loadURL = [request URL]; //this is the url the user tapped
if ([[loadURL scheme] isEqual:customScheme])
//if the url starts with "safari://"
NSString * absoluteURL = [loadURL absoluteString];
//replace "safari" with "https"
absoluteURL = [absoluteURL stringByReplacingCharactersInRange:NSMakeRange(0,[customScheme length]) withString:@"https"];
NSURL * openURL = [NSURL URLWithString:absoluteURL];
//open the URL in MobileSafari
[[UIApplication sharedApplication] openURL:openURL];
//tell your UIWebView to ignore this request
return NO;
else
//this is not a safari:// url, so handle it normally
return YES;
【讨论】:
必须将方案替换为https://
而不是http://
才能正确启动Safari?网络视图是否会产生其他干扰?
@BoltClock 我随便选了https
。如果您想同时支持safari://
和safaris://
URL,那么您可以检查[loadURL scheme]
的两种变体,但保留替换位相同。或者你可以做某种字典来将截获的方案(键)映射到 MobileSafari 应该使用的方案(值)
您也可以将http://
/https://
保留在URL 中,只删除safari://
而不是替换它。
@Cory 我不确定UIWebView
是否会正确解析,但如果确实如此,那就太棒了。或者也许你可以做一个像safari-http://
或safari-https://
这样的方案,然后去掉safari-
(或者见鬼:external-http://
)
啊抱歉,伙计们,我的问题并不清楚。我正在寻找一种方法来做到这一点,而无需修改我的客户。所以想知道是否有像 tel:// 等那样的 safari 本地快捷方式。以上是关于我可以格式化 URL 以从我的应用程序的 UIWebView 中启动 Safari 吗?的主要内容,如果未能解决你的问题,请参考以下文章
在 VC++ 中无法使用 CreateProcess() 打开 URL