Javascript 最新桌面Firefox被认定为触摸设备?

Javascript 最新桌面Firefox被认定为触摸设备?,javascript,jquery,firefox,Javascript,Jquery,Firefox,有没有人注意到,在最新版本的桌面Firefox上,它被视为触摸设备 我正在使用以下脚本: function isTouch() { try{ document.createEvent("TouchEvent"); return true; } catch(e){ return false; } } if (isTouch()) { alert('I am touch device!') } 在最新版本的桌面Firefox之前,这个脚本给了我完美的结果。是虫子吗?我错过什么了吗

有没有人注意到,在最新版本的桌面Firefox上,它被视为触摸设备

我正在使用以下脚本:

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

if (isTouch()) {
  alert('I am touch device!')
}
在最新版本的桌面Firefox之前,这个脚本给了我完美的结果。是虫子吗?我错过什么了吗

谢谢大家抽出时间

编辑:虚惊一场的人。我不知道出了什么问题,我尝试重新设置首选项,禁用了所有扩展,但没有运气

我最终通过刷新firefox解决了这个问题(尽管我丢失了所有扩展,不得不重新安装)


感谢大家的努力,并对由此带来的不便表示歉意。

您只是检查是否可以创建特定类型的活动,而不是检查您当前是否使用触摸设备

这是一个更完整的isTouchDevice函数,我不久前基于Modernizer的核心编写了它

/**
 * Detect if the current device is a touch device.
 * Inspired by Modernizr and hardcore streamlined.
 */
function isTouchDevice() {
    var bool;
    if( ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch ) {
        bool = true;
    }
    else {
        var fakeBody = document.createElement( 'fakebody' );
        fakeBody.innerHTML += '<style>@media (touch-enabled),(-webkit-touch-enabled),(-moz-touch-enabled),(-o-touch-enabled){#touchtest{top:42px;position:absolute}}</style>';
        document.documentElement.appendChild( fakeBody );

        var touchTestNode = document.createElement( 'div' );
        touchTestNode.id = 'touchtest';
        fakeBody.appendChild( touchTestNode );
        bool = touchTestNode.offsetTop === 42;
    }
    return bool;
}
/**
*检测当前设备是否为触摸设备。
*灵感来源于Modernizer和hardcore streamlined。
*/
函数ISTOUCH设备(){
瓦尔布尔;
if((窗口中的“ontouchstart”)| | window.DocumentTouch和DocumentTouch的documentinstanceof DocumentTouch){
布尔=真;
}
否则{
var fakeBody=document.createElement('fakeBody');
fakeBody.innerHTML+='@media(触控启用),(-webkit触控启用),(-moz触控启用),(-o-touch启用){#touchtest{top:42px;position:absolute}}';
document.documentElement.appendChild(fakeBody);
var touchTestNode=document.createElement('div');
touchTestNode.id='touchtest';
appendChild(touchTestNode);
bool=touchTestNode.offsetTop==42;
}
返回布尔;
}

我也遇到过类似的问题,也许有些人会从这些信息中受益

在我的例子中,Firefox桌面上的Modernizer总是检测到触摸事件为正,即使它们没有被触发

最后,我意识到“dom.w3c\u touch\u events.enabled”的值为“1”,即使我自己没有设置它。 它实际上是通过响应设计视图中的“触摸”按钮打开的,但即使在使用相同的按钮禁用触摸事件后,也从未切换回“0”

所以我向Mozilla报告了一个bug:

您将在那里找到一个测试用例

基本上,我必须回到正常状态的唯一解决方案是在“about:config”中将“dom.w3c\u touch\u events.enabled”的值手动更改为“0”。 我现在意识到,通过在响应式设计视图中启用触摸事件,我必须在之后手动将其切换回


希望这能帮助一些人

浏览器永远不会被识别为设备!JSAPI返回底层系统的功能–可能有一个触摸屏(就像现代ThinkPad一样,它有一个键盘和一个触摸屏).考虑到Windows现在安装在基于触摸屏的笔记本电脑上,而且现在连Ubuntu都可以使用触摸屏笔记本电脑,桌面浏览器启用触摸事件也就不足为奇了。
document.createEvent(“TouchEvent”)
不支持错误:操作不受支持
,FF 38.05问题是,在最新版本的Firefox之前,这种情况并没有发生。以前的版本显示了桌面版firefox识别触摸事件的正确结果Hanks!我会测试的@feeela,它能正确识别各种设备吗?包括触摸屏笔记本电脑等?使用
document.createEvent(“TouchEvent”)
在最新的FF中确实会返回一个错误,所以虽然这个脚本可能更全面,但我怀疑它在OPs测试中仍然会返回true,因为他们可能有触摸设备,但不知道。@Anthony像我一直做的那样在我的桌面上测试。即使使用此脚本,firefox也会给我正面的触摸结果:/例如,如果我从
0
转到
about.config
并将
dom.w3c\u touch\u events.enabled
更改为
1
,则
document.createEvent(“TouchEvent”)