如何在cordova混合应用程序中禁用默认触摸行为?

时间:2014-06-04 14:10:35

标签: android cordova webkit android-webview chromium

我希望有人在这个问题上对我有一些有用的见解:

我们正在开发移动平台的混合应用程序(目前使用cordova的android)。应用程序是全屏(MATCH_PARENT),所有移动都应在Web代码中处理。这在大多数情况下通过对触摸事件使用preventDefault()工作正常。在过去的几天里,我们一直在排除webview滚动而不是内容的错误(默认触摸行为,应用滚动而不是网页代码)。

我们经历了很多堆栈溢出解决方案但无济于事: document.addEventListener("touchmove", preventBehavior, false); - prevents me using from using overflow: scroll; - work around?Android - undesired WebView movement on drag gestureDisable scrolling in webview?How to fix"Miss a drag as we are waiting for WebCore's response for touch down"& How to disable horizontal scrolling in Android webview仅举几例。

最后我们发现了这个: https://code.google.com/p/chromium/issues/detail?id=260732解释了在执行时间超过200毫秒的Web代码中处理的触摸事件将被取消并发送到UIThread进行处理。

这当然是预期的行为,目前正在进行中。正如线程中提到的,chrome 35将支持touch-action:none css属性(http://www.w3.org/TR/pointerevents/#the-touch-action-css-property)。



最后针对问题和实际问题:

我们希望处理Web代码(JavaScript)中的所有触摸事件,并且应用程序是为它设计的。 有没有办法阻止android和cordova取消webkit / chromium事件处理并调用默认行为。通用解决方案的点数,因为我们要支持Android> 4.0(webkit和chrome)

对于KitKat(铬30),我们设法通过使触摸事件处理程序在超时中调用功能来解决问题。然而,这对于较旧且特别慢的设备(在Galaxy tab 2和Galaxy S2上测试)不适用。

我会非常感谢有关这个问题的任何答案。



编辑
我还应该注意,我通过WebViewInputDispatcher(android.webkit.webviewinputdispatcher.java,android 4.1.1)阅读并描述了行为=将触摸事件排队到Web处理程序>启动计时器>计时器超过200毫秒&网络代码未被网络代码消费>取消网络活动并改为调用ui touch事件。

0 个答案:

没有答案