Microsoft Edge:区分桌面与 Surface/Touch

Posted

技术标签:

【中文标题】Microsoft Edge:区分桌面与 Surface/Touch【英文标题】:Microsoft Edge: Distinguish Desktop vs. 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 移动版和桌面版,这很难。 【参考方案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/平板电脑。

以上是关于Microsoft Edge:区分桌面与 Surface/Touch的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft edge锁定在任务栏上,被修改主页360的解决方法

Windows 10 系统Microsoft Edge的使用手册

安卓手机浏览器Microsoft Edge更新

如何卸载自动推送的 Microsoft Edge 浏览器?

Microsoft Edge 是不是支持 COM 自动化(InternetExplorer 对象)?

连接电脑与手机 Microsoft Edge 安卓版