SFSafariViewController 崩溃:指定的 URL 具有不受支持的方案

2024-01-09

My code:

if let url = NSURL(string: "www.google.com") {
    let safariViewController = SFSafariViewController(URL: url)
    safariViewController.view.tintColor = UIColor.primaryOrangeColor()
    presentViewController(safariViewController, animated: true, completion: nil)
}

仅在初始化时才会崩溃,但有例外:

指定的 URL 具有不受支持的方案。仅支持 HTTP 和 HTTPS URL

当我使用url = NSURL(string: "http://www.google.com"), 一切安好。 我实际上是从 API 加载 URL,因此,我无法确定它们是否会带有前缀http(s)://.

如何解决这个问题呢?我应该检查并添加前缀吗http://总是如此,还是有解决方法?


尝试检查方案URL在创建实例之前SFSafariViewController.

Swift 3:

func openURL(_ urlString: String) {
    guard let url = URL(string: urlString) else {
        // not a valid URL
        return
    }

    if ["http", "https"].contains(url.scheme?.lowercased() ?? "") {
        // Can open with SFSafariViewController
        let safariViewController = SFSafariViewController(url: url)
        self.present(safariViewController, animated: true, completion: nil)
    } else {
        // Scheme is not supported or no scheme is given, use openURL
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }
}

Swift 2:

func openURL(urlString: String) {
    guard let url = NSURL(string: urlString) else {
        // not a valid URL
        return
    }

    if ["http", "https"].contains(url.scheme.lowercaseString) {
        // Can open with SFSafariViewController
        let safariViewController = SFSafariViewController(URL: url)
        presentViewController(safariViewController, animated: true, completion: nil)
    } else {
        // Scheme is not supported or no scheme is given, use openURL
        UIApplication.sharedApplication().openURL(url)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SFSafariViewController 崩溃:指定的 URL 具有不受支持的方案 的相关文章

随机推荐