【问题标题】:Microsoft Edge: Distinguish Desktop vs. Surface/TouchMicrosoft Edge:区分桌面与 Surface/Touch
【发布时间】:2016-06-24 11:26:41
【问题描述】:

简短但显然很棘手的问题: 如何区分桌面上的 Microsoft Edge 浏览器和 Javascript 中的 Surface-Tablets?

Windows 10 上的 Edge 显示用户代理

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586

就我的研究结果而言,Surface 设备上的用户代理是

Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586

所以唯一的区别似乎是“Win64; x64”,但我不能依赖它,因为它只显示当前的 CPU 架构,对吧?

我担心的是:我正在开发一个 Web 应用程序,它为触摸设备提供了一些特殊的菜单项,因为它们无法识别双击或鼠标右键。所以在 iOS/Android 上我可以很容易地弄清楚这一点,但对于 Win10 移动版和桌面版,这很难。

关于如何将这些与环境区分开来,您还有其他提示吗?

【问题讨论】:

  • 为什么需要知道?这将帮助我们提供可能的解决方案
  • 谢谢,你问。我担心的是:我正在开发一个 Web 应用程序,它为触摸设备提供了一些特殊的菜单项,因为它们无法识别双击或鼠标右键。所以在 iOS/Android 上我可以很容易地弄清楚这一点,但对于 Win10 移动版和桌面版,这很难。

标签: javascript browser user-agent microsoft-edge


【解决方案1】:

我猜你的移动设备 User Agent 字符串有误:

Mozilla/5.0 (Windows Phone 10.0; Android ; ; ) AppleWebKit/ (KHTML, like Gecko) Chrome/ Mobile Safari/ Edge/.

可通过MSDN获取。

【讨论】:

  • 好吧,我引用的 Surface 用户代理实际上来自 Trekstor Windows 10 Surftab,我的一个朋友拥有它。
【解决方案2】:

移动设备包含一些桌面浏览器不包含的事件

你可以使用类似这个函数的东西

function isTouch() {  
  var touch = false;
  try {  
    document.createEvent("TouchEvent");  
    touch = true;
  } catch (e) {}  
  return touch;
}

【讨论】:

  • 有些笔记本电脑带有触摸屏,但这种假设是失败的:(我是硬着头皮学到的
  • 没错,但是在这些设备上,用户应该使用鼠标作为输入设备,因为我的应用程序主要是为基于桌面的客户设计的。
  • 其实我使用 Modernizr 的方法来区分触摸浏览器 (return !!('ontouchstart' in window) || !!('onmsgesturechange' in window)),但这并不能区分 IE11/Edge 桌面和 Surface/平板电脑。
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2021-03-19
相关资源
最近更新 更多