gpt4 book ai didi

ios - WKWebView goBack 需要两次调用

转载 作者:行者123 更新时间:2023-11-28 15:06:23 25 4
gpt4 key购买 nike

我正在开发一个使用 WKWebView 和自定义导航按钮的 iOS 应用程序。我们发现点击某些链接需要使用我们的后退按钮两次,因为第一次调用似乎只是重新加载当前页面。这不会发生在移动版 Safari 中。

是什么导致需要调用两次 goBack() 才能实际导航回一页,而它在 Safari 中可以正常工作?我可以在应用程序中进行更改以解决问题吗?

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

更新:看来该网站正在使用 JavaScript 加载某些内容。发生这种情况时根本不会调用 observeValue 方法,这可能是罪魁祸首。

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
}
}

最佳答案

尝试使用以下委托(delegate)方法,

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(.allow)
}

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
decisionHandler(.allow)
}

你实现了一个但没有调用decisionHandler(.allow)

关于ios - WKWebView goBack 需要两次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48406134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com