【问题标题】:Get URL of all items tapped with WKWebView获取使用 WKWebView 点击的所有项目的 URL
【发布时间】:2015-06-14 11:19:30
【问题描述】:

我有一个 WKWebView 在 iOS 中加载页面。如果用户导航到 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,clickedUrl = http://www.youtube.com,这很好。但是......如果用户然后点击视频 - 什么都没有。和另一个视频 - 什么都没有。我没有得到点击视频的 URL。同样的情况也发生在 Vimeo 和其他各种网站上。

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

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

抱歉...请查看重复/类似问题:Detect when WKWebView has finished loading EVERY time

【问题讨论】:

  • 嗨安德烈,你解决了这个问题吗?
  • 很遗憾没有。我回到 UIWebView 继续我的项目。将在 Swift 的下一个版本出现时再试一次,看看它是否已修复。我已在 Apple 的 WKWebView 支持论坛上将其作为问题提出。
  • 感谢 Eric D. ...问题中确实如此。当我发布这些内容时,我才刚刚加入该网站 - 我现在知道事情是如何运作的!

标签: ios swift url wkwebview


【解决方案1】:

你需要观察 WKWebViews URL KVO 属性:

斯威夫特:

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

目标-C:

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

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

【讨论】:

    【解决方案2】:

    使用以下方法获取触发url:

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

    【讨论】:

      猜你喜欢
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-01
      • 2015-08-28
      • 2016-01-14
      • 2021-04-05
      • 1970-01-01
      相关资源
      最近更新 更多