【问题标题】:Can I format an URL to launch Safari from within my app's UIWebView?我可以格式化 URL 以从我的应用程序的 UIWebView 中启动 Safari 吗?
【发布时间】:2010-12-22 00:23:37
【问题描述】:

我的应用有一个 UIWebView,它显示了相当多的内容。对于其中的一些内容,我想退出应用程序,并启动 Safari 来处理 Web 内容,而不是在我的 UIWebView 中进行。是否有一种 url 格式可以显式启动 Safari 而不是在 UIWebView 中加载页面?

显然我不能使用 http://,因为它只是在适当的位置打开了 url。我可以使用 safari:// 或类似的东西吗?

编辑:抱歉,我最初并不清楚。我正在寻找一种解决方案,该解决方案涉及在不修改我的客户的情况下更改页面上的 url。希望有一个原生的 Safari 启动模式,类似于手机的 tel://。

【问题讨论】:

    标签: iphone uiwebview


    【解决方案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 本地快捷方式。
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    相关资源
    最近更新 更多