Функция "возврата" WKWebView не выполняет обновление и код javascript.

У меня есть ViewController, встроенный в NavigationController, и этот ViewController добавляет WKWebView в качестве подпредставления.

Проблема в том, что после перехода на любую веб-страницу; если я вызываю функцию "вернуться", предыдущая страница будет присутствовать, и она не будет обновлена ​​или перезагружена, а также заголовок панели навигации не будет обновлен.

Кроме того, мы обнаружили, что эта проблема возникает только в последней версии iOS 13.4.1 и не возникает в более ранних версиях. Я подозреваю, что это может быть проблема с кешем WKWebView и код JS не выполняется должным образом.

Кроме того, мы создали и инициализировали URLRequest с URL-адресом и применили указанные ниже политики кеширования, но безуспешно.

.useProtocolCachePolicy,.reloadIgnoringLocalCacheData,.reloadIgnoringLocalAndRemoteCacheData,.reloadIgnoringCacheData,.returnCacheDataElseLoad,.returnCacheDataDontLoad,.reloadRevalidatingCacheData

Мы пытались понять, что вызывает такое поведение, даже если мы создали новый проект, используя только простой WKWebView, и всегда сталкивались с одной и той же проблемой.

Вот код:

class ViewController: UIViewController {

var webView : WKWebView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    setupUI()

    let configurations = WKWebViewConfiguration()
    webView = WKWebView(frame: view.bounds, configuration: configurations)
    webView.navigationDelegate = self
    self.view.addSubview(webView)

    let myURL = URL(string:"https://www.stackru.com")!

    let request = URLRequest(url: myURL)
    webView.load(request)
}

func setupUI() {
    let forwardBarItem = UIBarButtonItem(title: "Forward", style: .plain, target: self,
                                  action: #selector(forwardAction))
    let backBarItem = UIBarButtonItem(title: "Backward", style: .plain, target: self,
                               action: #selector(backAction))

    self.navigationItem.leftBarButtonItem = backBarItem
    self.navigationItem.rightBarButtonItem = forwardBarItem
    self.navigationController?.navigationBar.barTintColor = .systemBlue
    self.navigationController?.navigationBar.tintColor = .white
}

@objc func forwardAction() {
    if webView.canGoForward {
        webView.goForward()
    }
}

@objc func backAction() {
    if webView.canGoBack {
        webView.goBack()
    }
}

}

extension ViewController: WKNavigationDelegate {

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
}

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    print("decidePolicyFor: \(String(describing: webView.url?.absoluteString))")
    decisionHandler(.allow)
}

func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
    print("didFailProvisionalNavigation: \(String(describing: webView.url?.absoluteString))")
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    print("didFinish: \(String(describing: webView.url?.absoluteString))")
}

func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
    print("didFail: \(String(describing: webView.url?.absoluteString))")
}

}

Я использую Xcode 11.3.1, Swift 5 и iOS 13.4.1

Я что-то упускаю? Как это исправить? Любая помощь могла бы быть полезна.

0 ответов

Другие вопросы по тегам