如果它不是链接,如何检测UIWebView上的点击

时间:2012-03-11 20:06:29

标签: iphone objective-c ios uiwebview uitapgesturerecognizer

所以如果没有点击链接,我想检测UIWebView上的点击。我该怎么做呢?我知道:

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
每次单击链接时都会调用

。但是我怎么知道它是否是UIWebView上的一个非链接?我一直在寻找网络,我找到的最近的是this。但是,这并不能告诉我水龙头是否在链接上

2 个答案:

答案 0 :(得分:2)

让我向您介绍为什么这是不可能的。

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
  1. 即使听起来很荒谬,当用户点击导航类型 UIWebViewNavigationTypeOther 而非 UIWebViewNavigationTypeLinkClicked 的链接时,也会调用此委托方法。这种情况发生在一些常见于互联网上的基于javascript的页面上。

  2. 即使听起来完全疯了,实际上用户还没有点击链接,会多次使用UIWebViewNavigationTypeLinkClicked调用此委托方法。有些网站使用模拟点击隐藏按钮来嵌入框架/ iframe的内容,这会导致使用 UIWebViewNavigationTypeLinkClicked 进行多次调用。

    这种以模拟点击嵌入内容的奇怪方式已经完成 绕过某些浏览器的隐私设置。谷歌被起诉 对于这个问题,不得不付出数百万的罚款, 因为他们使用这个技巧在Safari浏览器中设置cookie 即使用户已将浏览器配置为不接受这些 饼干。

  3. 因此,如果您完全依赖于UIWebView的委托方法,那么当没有点击时您将获得点击,而当点击时,您将获得点击。因此,在不受控制的环境中,这是不可能的。

    但是,你究竟想做什么?

答案 1 :(得分:0)

我觉得以下方法理论上应该有效。您可以将UIWebView包装在UIView容器中,并在容器视图上设置手势识别器。然后,UIWebView未处理的触摸事件将在视图层次结构中向上传递,并被容器视图拦截。

在容器UIView中实施适当的处理程序&你可以检测到水龙头。希望这很清楚......

如果这种方法没有结果,那么你可以去javascript路线。即将javascript事件作为webPage加载&你已准备好出发。有关详细信息,请参阅此处 - Does UIGestureRecognizer work on a UIWebView?