Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何检测UIWebView上的点击,如果它';这不是一个链接_Iphone_Objective C_Ios_Uiwebview_Uitapgesturerecognizer - Fatal编程技术网

Iphone 如何检测UIWebView上的点击,如果它';这不是一个链接

Iphone 如何检测UIWebView上的点击,如果它';这不是一个链接,iphone,objective-c,ios,uiwebview,uitapgesturerecognizer,Iphone,Objective C,Ios,Uiwebview,Uitapgesturerecognizer,因此,如果UIWebView没有点击链接,我想检测它是否被点击。我该怎么做?我知道: - (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 每次单击链接时调用。但是,我如何知道是不是点击UIWebView而不是链接?我一直在网上搜索,找到的最接近的是。然而,这并不

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

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

每次单击链接时调用。但是,我如何知道是不是点击UIWebView而不是链接?我一直在网上搜索,找到的最接近的是。然而,这并不能告诉我点击是否在链接上

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

在容器
UIView
中实现适当的处理程序&您可以检测轻敲。希望这是清楚的


如果这种方法没有结果,那么您可以使用javascript。i、 e.将javascript事件放置为网页加载&你可以开始了。更多信息请参见此处-

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

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

  • 即使听起来很疯狂,也会有多次使用UIWebViewNavigationTypeLinkClicked调用此委托方法,而实际上用户尚未单击链接。有些网站通过模拟单击隐藏按钮来嵌入frame/iframe的内容,这会导致多次调用UIWebViewNavigationTypeLinkClicked

    这种通过模拟点击嵌入内容的奇怪方式已经完成了 绕过某些浏览器的隐私设置。谷歌被起诉 前一段时间因为这个而要付几百万的罚金, 因为他们使用这个技巧在Safari浏览器中设置cookie 即使用户已将浏览器配置为不接受这些 饼干

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

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

    但是,您到底想做什么?

    问题是,单击链接仍会触发轻触手势识别器图标,而最重要的部分是-(BOOL)手势识别器:(uigesturecognizer)手势识别器应与手势识别器:(uigesturecognizer)同时识别在执行shouldStartLoadWithRequest之前调用otherGestureRecognizer。这将发生。在
    手势识别器中
    您必须找出一些忽略手势的方法。这“某种方法”实际上是我真正的问题。。我一直在试着玩弄它,但没有解决办法。实际上,你为什么需要这个?考虑到您使用的是uiwebview,您不能在javascript本身中执行此类操作吗?