WKWebView GoBack需要两次调用 [英] WKWebView goBack requiring two invocations
本文介绍了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屋!
查看全文