2015-04-09 2 views
6

Ich habe eine WKWebView, die eine Seite in iOS lädt. Wenn der Benutzer in der WKWebView zu einer anderen Seite navigiert, kann ich die URL sie angeklickt wie folgt:URL von allen mit WKWebView getappten Elementen erhalten

var clickedUrl = String() 

func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) { 

    clickedUrl = webView.URL?.absoluteString as String! // GETS URL OF CURRENT PAGE LOADED 
} 

Wenn der Benutzer auf YouTube geht, clickedUrl = http://www.youtube.com, das ist toll. JEDOCH ... Wenn der Benutzer dann auf ein Video klickt - nichts. Und noch ein Video - nichts. Ich erhalte die URL des angeklickten Videos nicht. Das gleiche passiert auf Vimeo und verschiedenen anderen Seiten.

Ich habe hier einige Nachforschungen angestellt und andere Beiträge gefunden, und es scheint, dass dies etwas damit zu tun hat "WKWebView meldet nicht das Ende des Ladens auf Nicht-Hauptframes", aber keine Erklärung, wie man an die URL gelangt das wurde geladen. Ich vermute, dass dies etwas mit Seiten wie YouTube zu tun hat, die JavaScript verwenden, um zu anderen Seiten ihrer Website zu navigieren und diese zu laden.

Ich habe auch versucht webView(_:decidePolicyForNavigationAction:). Diese Funktion ist ausführlicher, aber diese Funktion erkennt auch nicht die URL von Links, die in Websites wie YouTube angeklickt wurden. Ich möchte die URL von allem erhalten, auf das der Nutzer klickt. Ich schätze, ich muss tief in NSURL oder NSURLRequest gehen, um das zu bekommen, aber ich kann nicht herausfinden, wie das geht. Jede Hilfe würde sehr geschätzt werden.

Apologies ... Bitte sehen Duplikat/ähnliche Frage: Detect when WKWebView has finished loading EVERY time

+0

Hallo Andre, hast du dieses Problem behoben? –

+0

Leider nicht. Ich ging zurück zu UIWebView, um mit meinem Projekt fortzufahren. Wird es erneut versuchen, wenn die nächste Veröffentlichung von Swift kommt, um zu sehen, ob es repariert wurde. Ich habe es als ein Problem im WKWebView-Support-Forum auf Apple angesprochen. – AT3D

+0

Mögliches Duplikat von [Wird erkannt, wenn WKWebView JEDES Mal geladen wurde] (http://stackoverflow.com/questions/29603010/detect-when-wkwebview-has-finished-loading-every-time) – Moritz

Antwort

2

Sie müssen WKWebViews URL KVO Eigenschaft beachten:

Swift:

webView.addObserver(self, forKeyPath: "URL", options: .New, context: nil) 

Objective-C:

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

Und dann Zugriff WKWebViews URL-Eigenschaft, wie Sie normalerweise innerhalb von beobachten Sie: ValueOnForKeyPath: OfObject: Change: Kontext.

Verwandte Themen