使用GWT识别触控/手势功能设备

时间:2012-12-07 06:41:40

标签: gwt mobile touch device jsni

我想知道是否有可能确定设备是否能够在GWT中触摸/手势事件

像iPhone这样的设备在很大程度上支持Multi-Touch Events。同样,桌面版Google Chrome也支持TouchEvents。目前, Windows 8 的设计使用的是响应TouchEvents的IE。

我正在开发一个应用程序,我希望将某些功能仅限于Touch / Gesture Capable Devices!任何解决方案,请帮忙?

3 个答案:

答案 0 :(得分:1)

我认为除了UA之外还有其他办法嗅探。

答案 1 :(得分:1)

GWT目前没有提供这样的实用程序。

另外,直到gwt为我们提供了直接的api,对于像stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript这样的现有javascript技术编写jsni是有意义的。

对于Windows 8,要引用的msdn文档是http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx

答案 2 :(得分:0)

我使用用户代理检查延迟绑定来完成此操作。我创建了一个白名单,以便以后可以添加更多设备。

以下是代码,

<!-- Definitions for mobile -->
<define-property name="mobile.user.agent" values="android, ios, not_mobile" />
<property-provider name="mobile.user.agent"><![CDATA[
{
   var ua = window.navigator.userAgent.toLowerCase();
   if (ua.indexOf("android") != -1) { return "android"; }
   if (ua.indexOf("iphone") != -1) { return "ios"; }
   if (ua.indexOf("ipad") != -1) { return "ios"; }
     return 'not_mobile';
   }
]]></property-provider>

<!-- Constrain the value for non-webkit browsers -->
<set-property name="mobile.user.agent" value="not_mobile" >
  <none> <!-- Actually means NOR, in this case "not safari" -->
    <when-property-is name="user.agent" value="safari" />
  </none>
</set-property>

然后我使用模块文件中的 replace-with 属性定义了我的类。例如,我已经用iPad等设备替换了HTML5视频的flash播放器。

<replace-with class="com.example.HTML5Player">
        <when-type-is class="com.example.FlashPlayer" />
        <any>
           <when-property-is name="mobile.user.agent" value="android" />
           <when-property-is name="mobile.user.agent" value="ios" />
        </any>
</replace-with>