我需要在webvIEw上捕获代表单击的事件,但只有当webvIEw尚未使用点击时(即它们不是滚动/缩放 *** 作的开始,它们不是点击链接,它们不是点击触发一些javascript).
UIWebVIEw对其事件非常贪婪,根据我的经验,它往往不会传播它们,即使它们没有被消耗.为了捕获事件,我最终继承了主UIWindow(参见http://mithin.in/2009/08/26/detecting-taps-and-events-on-uiwebview-the-right-way/).这很好用,但问题是我无法识别我所获得的水龙头是否在webvIEw中触发了一些JavaScript.
作为一个额外的限制,我无法控制将在UIWebVIEw或将要显示的HTML中运行的JavaScript.
所以,问题是这样的:什么是一种方法来检测所有只有在UIWebVIEw本身没有触发任何其他动作的点击事件,尤其是JavaScript动作?
〜
如果您感到好奇,我正在研究的项目的源代码是在GitHub上:找到它,只要求Google指向Baker Framework.
解决方法 用JavaScript做到这一点.首先,在webvIEw完成加载后,将JavaScript单击处理程序附加到正文以吸收任何未使用的点击.让它加载一个虚构的域作为它的动作:- (voID)webVIEwDIDFinishLoad:(UIWebVIEw *)webVIEw{ Nsstring *script = @"document.body.onclick = function () { document.location.href = 'http://clickhandler'; }" [webVIEw stringByEvaluatingJavaScriptFromString:script];}
然后在您的webvIEw委托中,查看是否尝试加载组成域并拦截它们.您现在有办法拦截具有本机代码的JavaScript单击处理程序并做出相应的反应:
- (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中未使用的tap事件全部内容,希望文章能够帮你解决cocoa-touch – 拦截UIWebView中未使用的tap事件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)