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

时间:2016-12-18 21:41:32

标签: ios swift wkwebview

是否有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)

3 个答案:

答案 0 :(得分:6)

你是什么意思他们似乎总是似乎无法解雇?什么样的元素?他们必须为了让WkWebView能够工作。

您尝试更改网址的第一个迹象是: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中),并在看到它发生变化时执行您想要的操作。

答案 1 :(得分:0)

您可以添加观察者:

[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

答案 2 :(得分:0)

快速版本

orders
   pushKey
      name      : "62070228"
      orderList : "Noodles"
      options   : "no vegetables"