2016-12-18 7 views
3

WebViewのURLが変更されたときにいつでも検出できるWKWebViewクラスの関数はありますか?URLが変更されたかどうかを検出するためのWKWebView関数

WebView内の特定の要素を操作するときに、didCommitdidStartProvisionalNavigationの機能が必ずしも機能しないとは限りません。

EDIT:通知オブザーバを追加しようとしました。ここで私はこれまで持っているものです。

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) 
+0

ハッシュナビゲーションを使用していますか? –

答えて

5

彼らはいつも火のように見えるとはどういう意味ですか?どのような要素ですか?彼らはWkWebViewを動作させるために必要です。

URLを変更しようとしているあなたの最初の兆候はである:それは変更されていdidStartProvisionalNavigation:あなたがに行く時までに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 
} 

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

これらのデリゲートメソッドを(Swiftで)実装して、変更が反映されたときに必要な操作を行うだけです。

+0

私は後半の返事をお詫びしますが、これは完全に機能しました!どうもありがとうございました! –

+0

"__PRETTY_FUNCTION__"とは何ですか?私はそれに精通していない。また、Matt - 完全に機能する迅速なコードをお持ちですか?私はこれを迅速に変えるのに苦労している4 – jbrown94305

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

+0

Swiftを使用して実装する方法を知りましたか?私は通知を作成し、元の投稿に追加しました。 Swiftの通知構文はかなり異なっており、可能なすべての可能性のある試行を使い果たしました。私はここからどこに行くべきか分からない。 –

関連する問題