我发布了一个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)。但是,由于...
我能够将KVO WKWebView.url
分配给String变量。从那里,我能够将String值传递给一个函数,该函数然后处理要寻找的每个输出: