首页 > 解决方案 > 如何在 MS Edge 中可靠地检测触摸设备

问题描述

我相信 EDGE 最近改变了它的行为,当在桌面非触摸设备上使用时,现在报告 navigator.maxTouchPoints 的值 > 0

这破坏了我们用来检测触摸设备的以下 JS 代码:

function is_touch_device() {
    var touch = false;
    if ( window.PointerEvent && ('maxTouchPoints' in navigator) ) {
        // if Pointer Events are supported, just check maxTouchPoints
        if (navigator.maxTouchPoints > 0) {
          touch = true;
        }
    } else {
        // no Pointer Events...
        if ( window.matchMedia && window.matchMedia("(any-pointer:coarse)").matches ) {
          // check for any-pointer:coarse which mostly means touchscreen
            touch = true;
        } else if ( window.TouchEvent || ('ontouchstart' in window) ) {
            // last resort - check for exposed touch events API / event handler
            touch = true;
        }
    }
    return touch;
}

有谁知道在触摸设备上使用 MS Edge 时检测(在 JS 中)的可靠方法吗?我什么都没找到。

我知道Edge快要死了,但就目前而言,我必须支持它。

谢谢!

标签: javascriptmicrosoft-edge

解决方案


您可以使用以下代码来检查它是否是触摸设备。

<script type="text/javascript">
    if ("ontouchstart" in document.documentElement) {
        document.write("your device is a touch screen device.");
    }
    else {
        document.write("your device is NOT a touch device");
    }
</script>

推荐阅读