所以如果没有点击链接,我想检测UIWebView上的点击。我该怎么做呢?我知道:
- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
每次单击链接时都会调用。但是我怎么知道它是否是UIWebView上的一个非链接?我一直在寻找网络,我找到的最近的是this。但是,这并不能告诉我水龙头是否在链接上
答案 0 :(得分:2)
让我向您介绍为什么这是不可能的。
- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
即使听起来很荒谬,当用户点击导航类型 UIWebViewNavigationTypeOther 而非 UIWebViewNavigationTypeLinkClicked 的链接时,也会调用此委托方法。这种情况发生在一些常见于互联网上的基于javascript的页面上。
即使听起来完全疯了,实际上用户还没有点击链接,会多次使用UIWebViewNavigationTypeLinkClicked调用此委托方法。有些网站使用模拟点击隐藏按钮来嵌入框架/ iframe的内容,这会导致使用 UIWebViewNavigationTypeLinkClicked 进行多次调用。
这种以模拟点击嵌入内容的奇怪方式已经完成 绕过某些浏览器的隐私设置。谷歌被起诉 对于这个问题,不得不付出数百万的罚款, 因为他们使用这个技巧在Safari浏览器中设置cookie 即使用户已将浏览器配置为不接受这些 饼干。
因此,如果您完全依赖于UIWebView的委托方法,那么当没有点击时您将获得点击,而当点击时,您将获得点击。因此,在不受控制的环境中,这是不可能的。
但是,你究竟想做什么?
答案 1 :(得分:0)
我觉得以下方法理论上应该有效。您可以将UIWebView
包装在UIView
容器中,并在容器视图上设置手势识别器。然后,UIWebView
未处理的触摸事件将在视图层次结构中向上传递,并被容器视图拦截。
在容器UIView
中实施适当的处理程序&你可以检测到水龙头。希望这很清楚......
如果这种方法没有结果,那么你可以去javascript路线。即将javascript事件作为webPage加载&你已准备好出发。有关详细信息,请参阅此处 - Does UIGestureRecognizer work on a UIWebView?