WKWebView GoBack需要两次调用 [英] WKWebView goBack requiring two invocations

查看:0
本文介绍了WKWebView GoBack需要两次调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一款iOS应用程序,它使用WKWebView,带有定制的导航按钮。我们发现下面的一些链接需要使用Back按钮两次,因为第一次调用似乎只是重新加载当前页面。这在移动Safari中不会发生。

是什么原因导致GoBack()在Safari中正常工作时,需要调用两次才能实际导航回一个页面?我是否可以在应用程序中进行更改以更正此问题?

注意:我无法更改网站的内容或结构,因此必须在应用程序中进行任何修复。

更新: 该网站的一些内容加载似乎使用了JavaScript。发生这种情况时,根本不会调用serveValue方法,它很可能是罪魁祸首。

import UIKit
import WebKit
import SafariServices

class LandingPageViewController: UIViewController, SFSafariViewControllerDelegate, WKUIDelegate, WKNavigationDelegate {
    @IBOutlet var urlNavigationItem: UINavigationItem!    
    @IBOutlet var backButton: UIBarButtonItem!
    @IBOutlet var forwardButton: UIBarButtonItem!
    @IBOutlet var reloadButton: UIBarButtonItem!
    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        webView = WKWebView()
        view.addSubview(webView)
        webView.addObserver(self, forKeyPath: "loading", options: .new, context: nil)
        let request = URLRequest(url: url) //url is defined elsewhere
        webView.navigationDelegate = self
        webView.load(request)
        webView.allowsBackForwardNavigationGestures = true
        webView.uiDelegate = self
        backButton.isEnabled = false
        forwardButton.isEnabled = false
    }

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {            
        if(keyPath == "loading"){
            backButton.isEnabled = webView.canGoBack
            forwardButton.isEnabled = webView.canGoForward
        }
    }

    @IBAction func back(_ sender: UIBarButtonItem) {
        webView.goBack()
    }

    @IBAction func forward(_ sender: UIBarButtonItem){
        webView.goForward()
    }    

    @IBAction func reload(_ sender: UIBarButtonItem) {
        let request = URLRequest(url: webView.url!)
        webView.load(request)
    }

    func webView(_ webView: WKWebView,
                 decidePolicyFor navigationAction: WKNavigationAction,
                 decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
       // Custom logic here
     }
}

推荐答案

我也面临同样的问题。对我来说起作用的是停止导航,然后返回。

func goBack() {
    self.webView.stopLoading()
    if (self.webView.canGoBack) {
        self.webView.goBack()
        return;
    }
}

这篇关于WKWebView GoBack需要两次调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆