我可以格式化 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

添加注释以从另一个视图映射

是否可以仅使用用户从我的 .net 核心应用程序登录 Azure 并通过?

React-router:更改 URL 并清除历史记录

应用程序中未找到服务器 404 以从 api 读取数据但不传递参数它可以工作