gpt4 book ai didi

cocoa-touch - 拦截 UIWebView 中未使用的点击事件

转载 作者:可可西里 更新时间:2023-11-01 05:42:42 26 4
gpt4 key购买 nike

我正在开发一个基于 UIWebView 的 iPad 应用程序:为了用最简单的术语解释它,该应用程序显示了一个大型交互式 webview,此外它还支持自定义手势。

我需要捕获表示在 webview 上单击的事件,但只有在 webview 尚未使用这些点击时(即它们不是滚动/缩放操作的开始,它们不是链接上的点击,它们不是触发某些 javascript 的水龙头)。

UIWebView 对其事件非常贪婪,根据我的经验,它往往不会传播它们,即使它们没有被消耗。为了捕捉事件,我最终将主 UIWindow 子类化(参见 http://mithin.in/2009/08/26/detecting-taps-and-events-on-uiwebview-the-right-way/ )。这运行良好,但问题是我无法识别我获得的水龙头是否在 web View 中触发了一些 javascript。

作为附加限制,我无法控制将在 UIWebView 中运行的 javascript 或将要显示的 HTML。

因此,问题是这样的:有什么方法可以检测所有且仅检测未触发 UIWebView 本身的任何其他操作(尤其是 javascript 操作)的点击事件?

~

如果您好奇的话,我正在做的项目的源代码在 GitHub 上:要找到它,只需让 Google 将您指向 Baker Framework。

最佳答案

使用 JavaScript 执行此操作。首先,在您的 webview 完成加载后,将 javascript 点击处理程序附加到正文以吸收任何未使用的点击。让它在 Action 时加载一个虚构的域:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *script = @"document.body.onclick = function () { document.location.href = 'http://clickhandler'; }"
[webView stringByEvaluatingJavaScriptFromString:script];
}

然后在您的 webview 委托(delegate)中,寻找加载组成域的尝试并拦截它们。您现在可以通过 native 代码拦截 javascript 点击处理程序并做出相应的 react :

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if ([request.URL.host isEqualToString:@"clickhandler"])
{
//handle click
//your logic here
return NO;
}
return YES;
}

关于cocoa-touch - 拦截 UIWebView 中未使用的点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4597118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com