そのWebViewのURLが変更されたときはいつでも検出できるWKWebViewクラスの関数はありますか?
didCommit
およびdidStartProvisionalNavigation
関数は、WebView内の特定の要素を操作するときに常に起動するとは限りません。
編集:通知オブザーバーを追加しようとしました。これが私がこれまでに持っているものです:
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で)実装し、それが変化したときにあなたが望むことをすることです。
Swiftバージョン
// Add observer
webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
// Observe value
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if let key = change?[NSKeyValueChangeKey.newKey] {
print("observeValue \(key)") // url value
}
}
オブザーバーを追加できます。
_[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