使用 SafariViewController 打开 url 时如果不成功则处理完成
Posted
技术标签:
【中文标题】使用 SafariViewController 打开 url 时如果不成功则处理完成【英文标题】:Handle completion if no success when opening url with SafariViewController 【发布时间】:2020-07-26 15:50:06 【问题描述】:如果SafariViewController
无法像UIApplication.shared.open
一样打开url
,有没有办法处理这种情况?
这是我的功能:
if ["http", "https"].contains(url.scheme?.lowercased() ?? "")
// Can open with SFSafariViewController
let safariViewController = SFSafariViewController(url: url)
self.present(safariViewController, animated: true)
// no bool given?
else
// Scheme is not supported or no scheme is given, use openURL
guard let url = URL(string: urlString) else
self.showInvalidUrlAlert()
return
UIApplication.shared.open(url, completionHandler: success in
if !success
print("failed")
self.showInvalidUrlAlert()
)
【问题讨论】:
【参考方案1】:使您的演示者视图控制器符合SFSafariViewControllerDelegate
。
class ViewController: SFSafariViewControllerDelegate
并将ViewController
设置为SafariViewController
的代表
safariViewController.delegate = self
然后处理加载状态是否成功使用 didCompleteInitialLoad委托。
func safariViewController(_ controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool)
// Handle loadStatus.
print(didLoadSuccessfully)
// if load unsuccessful, dismiss SFSafariViewController and try to open using openURL
if !didLoadSuccessfully
controller.dismiss(animated: true)
// UIApplication.shared.open(..
【讨论】:
【参考方案2】:我不认为 SFSafariViewController
与您的应用提供太多互动/反馈。
根据 Apple 文档:
用户的活动和与 SFSafariViewController 的交互是 对您的应用不可见,无法访问自动填充数据,浏览 历史记录或网站数据。
选择最佳的网页浏览课程
如果您的应用允许用户查看 来自 Internet 上任何地方的网站,使用 SFSafariViewController 班级。如果您的应用自定义、交互或控制显示 网页内容,使用 WKWebView 类。
正如 Apple 建议的那样,您可能想看看 WKWebView 类。
【讨论】:
以上是关于使用 SafariViewController 打开 url 时如果不成功则处理完成的主要内容,如果未能解决你的问题,请参考以下文章
在 UIWebview 之类的 ViewController 中使用 SafariViewController
如何从 SafariViewController 快速获取文本到我们的应用程序?
通过 SafariViewController 安装 MDM 配置文件
区分来自 MobileSafari 与 SafariViewController 的请求