获取使用WKWebView挖掘的所有项目的URL

时间:2015-04-09 07:40:39

标签: ios swift url wkwebview

我在iOS中加载了一个WKWebView页面。如果用户导航到WKWebView中的另一个页面,我可以获得他们点击的URL,如下所示:

var clickedUrl = String()

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

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

如果用户访问YouTube,则点击了#Url = http://www.youtube.com,这很棒。但是......如果用户点击视频 - 没有。另一个视频 - 什么都没有。我没有得到点击视频的网址。在Vimeo和其他各种网站上也是如此。

我已经在这里做了一些研究并发现了其他帖子,看起来这与“WKWebView没有报告非主框架上的加载完成有关”,但没有解释如何获取已加载的URL。我猜这与YouTube等网站使用JavaScript导航到其网站上的其他网页并加载它们有关。

我也试过webView(_:decidePolicyForNavigationAction:)。此功能更详细,但此功能也不会检测在YouTube等网站中点击的链接的网址。我想要做的是获取用户点击的所有内容的URL。我猜我需要深入NSURL或NSURLRequest才能得到这个,但我无法弄清楚如何做到这一点。任何帮助将不胜感激。

道歉 ...请参阅重复/类似问题:Detect when WKWebView has finished loading EVERY time

2 个答案:

答案 0 :(得分:2)

您需要观察WKWebViews URL KVO属性:

夫特:

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

目标-C:

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

然后像往常一样访问WVWebViews URL属性observeValueForKeyPath:ofObject:change:context。

答案 1 :(得分:-1)

使用以下方法获取触发网址:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, 
    change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
{
    if let tapLinkURL = webView.url{ print("print URL \(tapLinkURL)") }
}