一尘不染

WKWebView函数,用于检测URL是否已更改

swift

WKWebView类是否具有一个函数,可让您检测该WebView的URL是否已更改?

使用WebView中的某些元素时,didCommitand didStartProvisionalNavigation函数似乎并不总是会触发。

编辑: 尝试添加一个通知观察器。到目前为止,这是我所拥有的:

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)

阅读 445

收藏
2020-07-07

共1个答案

一尘不染

您是什么意思,他们似乎并不总是会开除?什么样的元素?他们必须为了WkWebView起作用。

该URL试图更改的第一个迹象是在:DecisionPolicyForNavigationAction

- (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中),并在看到更改时做您想要的事情。

2020-07-07