10

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

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

每次点击链接时都会调用。但是,我怎么知道它是否是对链接以外的 UIWebView 的点击?我一直在网上搜索,我找到的最接近的是这个。但是,这并不能告诉我点击是否在链接上

4

2 回答 2

2

让我带您了解为什么这是不可能的。

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

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

    这种通过模拟点击嵌入内容的奇怪方式是为了绕过某些浏览器的隐私设置。谷歌前段时间为此被起诉并不得不支付数百万罚款,因为即使用户已将浏览器配置为不接受这些 cookie,他们也使用此技巧在 Safari 浏览器中设置 cookie。

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

但是,你到底想做什么?

于 2014-06-18T22:29:56.843 回答
0

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

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

如果这种方法没有结果,那么你可以走 javascript 路线。即在网页加载时放置 javascript 事件,您就可以开始了。有关更多信息,请参见此处 - UIGestureRecognizer 是否适用于 UIWebView?

于 2012-03-11T20:16:08.007 回答