【问题标题】:iOS Swift SFSafariViewController update new URL and refresh viewiOS Swift SFSafariViewController 更新新 URL 并刷新视图
【发布时间】:2021-11-17 18:14:52
【问题描述】:
我正在使用 SFSafariViewController 加载网络链接,
在我的情况下,首先我需要在某个过程/时间(如 10 秒)后打开一个 URL,我需要在同一选项卡中更新我的 URL 并刷新 SFSafariViewController。
if let url = URL(string: "Google.com") {
let VC= SFSafariViewController(url: url)
VC.delegate = self
self.present(VC, animated: true, completion: nil)
}
有什么方法可以更新 URL 并刷新当前的 SFSafariViewController 页面?
【问题讨论】:
标签:
ios
swift
sfsafariviewcontroller
sfsafariviewcontrollerdelegate
【解决方案1】:
SFSafariViewController 专门用于呈现您的应用程序无法与之交互的 Web 内容。来自文档:
用户的活动和与 SFSafariViewController 的交互对您的应用不可见,无法访问自动填充数据、浏览历史记录或网站数据。
更具体地与您的问题相关,SFSafariViewController 的文档还说:
如果您的应用自定义、交互或控制网页内容的显示,请使用 WKWebView 类。
既然你想控制网页内容的显示(改变 URL)你应该使用 WKWebView。
【解决方案2】:
使用WKWebView解决问题。
class webViewController: WKNavigationDelegate, WKUIDelegate {
var webview: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webview = WKWebView(frame: self.view.bounds)
self.view.addSubview(webview)
webview.navigationDelegate = self
webview.uiDelegate = self
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url {
// Dosomthing()
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
func Dosomthing() {
self.webview.load(URLRequest(url: newURL))
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
self.webview.reload()
}
}
}