2015-04-09 17 views
6

Mam WKWebView ładowanie strony w iOS. Jeśli użytkownik przejdzie na inną stronę w WKWebView mogę uzyskać adres URL kliknięciu one następująco:Uzyskaj adres URL wszystkich elementów dotkniętych WKWebView

var clickedUrl = String() 

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

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

Jeśli użytkownik przechodzi do YouTube, clickedUrl = http://www.youtube.com, co jest dobre. JEDNAK ... Jeśli użytkownik kliknie na film - nic. I kolejny film - nic. Nie widzę adresu URL klikniętego wideo. To samo dzieje się na Vimeo i różnych innych stronach.

Zrobiłem tutaj trochę badań i znalazłem inne posty, i wydaje się, że ma to coś wspólnego z "WKWebView nie raportuje zakończenia ładowania na innych głównych ramkach", ale bez wyjaśnienia, jak uzyskać adres URL który został załadowany. Zgaduję, że ma to coś wspólnego z witrynami takimi jak YouTube, które używają JavaScript, aby przejść do innych stron w ich witrynie i załadować je.

Próbowałem również webView(_:decidePolicyForNavigationAction:). Ta funkcja jest bardziej szczegółowa, ale ta funkcja nie wykrywa również adresu URL linków klikniętych w witrynach takich jak YouTube. Chcę uzyskać adres URL wszystkiego, co użytkownik kliknie. Zgaduję, że muszę przejść do NSURL lub NSURLRequest, aby to uzyskać, ale nie mogę się dowiedzieć, jak to zrobić. Każda pomoc będzie bardzo ceniona.

Przeprosiny ... Proszę zobaczyć duplikat/podobną pytanie: Detect when WKWebView has finished loading EVERY time

+0

Cześć Andre, naprawiłeś ten problem? –

+0

Niestety nie. Wróciłem do UIWebView, aby przejść do mojego projektu. Spróbuję ponownie, gdy pojawi się kolejna wersja Swif, aby sprawdzić, czy została naprawiona. Podniosłem go jako problem na forum pomocy technicznej WKWebView w Apple. – AT3D

+0

Możliwy duplikat [Wykryj, gdy WKWebView zakończył ładowanie KAŻDEGO czasu] (http://stackoverflow.com/questions/29603010/detect-when-wkwebview-has-finished-loading-every-time) – Moritz

Odpowiedz

2

trzeba będzie obserwować właściwość WKWebViews URL KVO:

SWIFT:

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

Objective-C:

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

A następnie uzyskaj dostęp do właściwości URL WKWebViews, tak jak zwykle w obiekcie observeValueForKeyPath: ofObject: change: context.