0

我正在使用 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 页面?

4

2 回答 2

1

SFSafariViewController专门设计用于呈现您的应用程序无法与之交互的 Web 内容。从文档中:

用户的活动和与 SFSafariViewController 的交互对您的应用程序不可见,它无法访问自动填充数据、浏览历史记录或网站数据。

更具体地与您的问题相关,文档SFSafariViewController还说:

如果您的应用程序自定义、交互或控制 Web 内容的显示,请使用 WKWebView 类。

由于您想控制 Web 内容的显示(更改 URL),您可能应该使用 WKWebView。

于 2021-09-24T14:10:02.443 回答
0

用来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()
        }
    }
}
于 2021-10-01T16:25:52.647 回答