如何知道用户在加载页面时点击的URL?

时间:2014-06-18 08:29:03

标签: ios objective-c uiwebview

有时我们会在页面完全加载之前点击链接。事实证明,没有可靠的方法知道用户点击的链接是什么。您可能会说查看委托方法是安全的:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

但是,正如我的一些实验表明,对于同一页面,多次使用UIWebViewNavigationTypeLinkClicked调用此方法。

例如,尝试记录此路径:

  1. 转到google.com。
  2. 搜索“纽约时报”。
  3. 点击第一个链接。
  4. 在步骤(3),代表被叫3次!使用UIWebViewNavigationTypeLinkClicked。首先,当你点击链接从谷歌转到nytimes.com然后再加载两次。的在-理智!

    我已经走到了极点。我在iOS 8中重新构建了我的整个项目,希望新的WKWebView能够提供解决方案,但事实证明它的工作方式相同。

    我找到了一个解决方案,但是我真的不知道每次用户在页面加载时点击链接时它是否会起作用。

    这是:

    当您单击链接转到另一个页面时,使用此方法调用委托:

    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
    

    错误是:

    "The operation couldn’t be completed.” (-999)
    

    在抛出错误之前,UIWebView加载的最后一个链接是用户单击的新链接。因此,如果您将UIWebView加载的每个链接存储在名为lastURL的变量中,则可以使用lastURL作为新页面的URL。

    我担心的两件事:

    1. 调用委托get来报告错误,稍微延迟,允许加载新网页的几个子帧,导致lastURL存储新链接的某个子帧的URL,而不是实际的新链接。

    2. 针对其他一些问题引发错误-999,而不是因为用户点击链接而导致页面加载失败。

    3. 有更可靠的方法吗?我不在乎你的方式适用于iOS 7或iOS 8。

0 个答案:

没有答案