Modernizr.touch在firefox浏览器上返回true

时间:2014-02-28 04:35:36

标签: javascript firefox modernizr touch-event

我已经编写了一个代码,以基于触摸和非触摸来获取事件。它适用于所有其他浏览器和设备,但Firefox。默认FF返回true

var thumbsEvent, isTouch = Modernizr.touch; // detect the touch
if(isTouch){
   thumbsEvent = 'click';//on touch surface, click
}
else {
   thumbsEvent = 'mouseover';//on non touch surface, mouseover
}

有没有办法解决这个问题。

Example fiddle

6 个答案:

答案 0 :(得分:15)

代表Modernizr - 我们真的很抱歉。

Modernizr.touch已在尚未发布的版本3.0中重命名为Modernizr.touchevents,因为它更准确地描述了检测。基本上,所有这些检测都在检查是否存在触摸事件,如果找到它们则返回true。如果启用开发人员工具,桌面chrome会执行相同的操作。这只是意味着您的笔记本电脑上的firefox版本报告了对触摸事件的支持,原因可能有多种。

答案 1 :(得分:4)

我有同样的问题,这为我解决了这个问题:在firefox中转到" about:config",然后搜索设置" dom.w3c_touch_events.enabled"并重置那个。然后我不得不重新启动firefox,之后" Modernizr.touch"正确返回" false"对我来说。

来源:https://github.com/Modernizr/Modernizr/issues/1225

答案 2 :(得分:2)

有同样的问题:Modernizr.touch在台式机FireFox 33.1,Mac OS上返回true。

我的解决方案:使用移动优先方法,默认情况下应用所有与触摸相关的铃声和口哨声。如果Modernizr检测到.no-touch,则为桌面用户应用(或禁用)某些网站功能。

答案 3 :(得分:1)

我前段时间遇到过同样的问题。

问题是有些笔记本电脑型号带有触摸屏版本。我们发现,如果使用这样的模型,Modernizr.touch即使此人使用非触控笔记本电脑型号也会返回true。

现在,点击事件可以在触摸设备上运行,但不是相反。因此,我们通过添加额外的检查来解决此限制:

var thumbsEvent, isTouch = Modernizr.touch;
var isAndroid = ...; // Android detection code
var isIOs = ...; // iOS detection code

// touch is only supported on iOS and Android
// devices, which have for sure a touch interface
if(isTouch && (isAndroid || isIOs) ){
    thumbsEvent = 'click';
}
else {
    thumbsEvent = 'mouseover';
}

这可能不是最佳解决方案,因为您需要使用用户代理嗅探而不是功能检测来进行设备检测,这可能就是您首先使用Modernizr的原因。

此外,支持触摸但既不是iOS也不是Android的设备将被排除在触摸事件之外。

答案 4 :(得分:1)

暂时解决这个问题。我遇到了同样的问题所以我做的是我做了一点挖掘找到一个html5属性,它被FF检测到但不是在移动设备上,我发现flexbox是其中之一。 (阅读:http://html5please.com/#flexbox)。 以下是可用于修复问题的代码:

var isTouch = Modernizr.touch, // detect the touch
    isFlex = Modernizr.flexbox; // detect flexbox

if (isTouch) {
    // Detect if FF
    if (isFlex) ) {
       thumbsEvent = 'mouseover'; //on FF, mouseover
    } else {
       thumbsEvent = 'click';//on non-FF touch surface, click
    }
} else {
   thumbsEvent = 'mouseover';//on non touch surface, mouseover
}

请注意这是暂时的,如果移动设备开始支持flexbox,它将无法正常工作。

答案 5 :(得分:1)

至少从FF27开始就知道Firefox Bug:https://bugzilla.mozilla.org/show_bug.cgi?id=970346