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的使用手册