WKWebViewfunction用于检测URL是否已经改变

是否有一个WKWebView类的函数,允许您检测该WebView的URL何时更改?

在处理WebView中的某些元素时, didCommitdidStartProvisionalNavigation函数似乎并不总是被触发。

编辑:试图添加一个通知观察员。 这是我到目前为止:

 extension Notification.Name { static let checkURL = Notification.Name("checkURL") } NotificationCenter.default.post(name: .checkURL, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(getter: webView.url), name: .checkURL, object: webView.url) 

你是什​​么意思,他们似乎并不总是开火? 什么样的元素? 他们必须为了使WkWebView工作。

您的第一个指示,该URL正在尝试更改是在:decidePolicyForNavigationAction

 - (void) webView: (WKWebView *) webView decidePolicyForNavigationAction: (WKNavigationAction *) navigationAction decisionHandler: (void (^)(WKNavigationActionPolicy)) decisionHandler { NSLog(@"%s", __PRETTY_FUNCTION__); decisionHandler(WKNavigationActionPolicyAllow); //Always allow NSURL *u1 = webView.URL; NSURL *u2 = navigationAction.request.URL; //If changing URLs this one will be different } 

当你到达:didStartProvisionalNavigation它已经改变。

 - (void) webView: (WKWebView *) webView didStartProvisionalNavigation: (WKNavigation *) navigation { NSLog(@"%s", __PRETTY_FUNCTION__); NSURL *u1 = webView.URL; //By this time it's changed } 

你所要做的就是实现这些委托方法(在Swift中),当你看到它发生变化时,做你想做的事情。

你可以添加一个观察者:

[webView_ addObserver:self forKeyPath:@"URL" options:NSKeyValueObservingOptionNew context:NULL];

以及URL更改时调用的相应方法:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context