如何获取KVO #keyPath(WKWebView.url)的URL值?

问题描述 投票:0回答:1

我发布了一个more in-depth question来尝试深入探讨问题,但要简短:

我正在尝试通过WKWebView显示基于PHP / JS的Web应用程序(Laravel)。但是,由于脚本重定向属性的性质,我唯一真正检测到URL更改的代码是#keyPath(WKWebView.url)

override func viewDidLoad() {
    super.viewDidLoad()

    webView.navigationDelegate = self
    webView.uiDelegate = self    
    webView.addObserver(self, forKeyPath: #keyPath(WKWebView.url), options: .new, context: nil)
}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == #keyPath(WKWebView.url) {
        print("URL Change:", self.webView.url?.absoluteString ?? "# No value provided")
    }
}

但是,控制台的输出始终相同:

URL Change: # No value provided

因此,我知道WKWebView.url的KVO能够在WebView中基于脚本的重定向上触发。实际上,如果您查看my other question,它是唯一可以检测到这种重定向的代码-这很奇怪,因为在Safari(iOS和macOS)中启动时,URL栏都能反映出这些重定向。将更改重定向到URL的值。但是,在WKWebView中时,任何WKNavigationDelegate函数都无法检测到URL的这种更改。

被触发时,是否有任何方法可以直接从WKWebView.url的keyPath值获取URL?是否有任何其他替代方法可以获取URL?

[尝试从webView.url获取URL值似乎总是返回nil。

编辑:我能够使用observerValue函数代码获得确切的URL值:

if let key = change?[NSKeyValueChangeKey.newKey] {
    print("URL: \(key)") // url value
}

但是,我无法将其强制转换为String或将其传递给另一个函数。如果它包含.contains(“ https://”),有什么方法可以将此键设置为变量?

我已经发布了一个更深入的问题,试图深入探讨问题,但总之:我试图通过WKWebView显示基于PHP / JS的Web应用程序(Laravel)。但是,由于...

ios swift macos wkwebview key-value-observing
1个回答
0
投票

我能够将KVO WKWebView.url分配给String变量。从那里,我能够将String值传递给一个函数,该函数然后处理要寻找的每个输出:

© www.soinside.com 2019 - 2024. All rights reserved.