Javascript 最新桌面Firefox被认定为触摸设备?
有没有人注意到,在最新版本的桌面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之前,这个脚本给了我完美的结果。是虫子吗?我错过什么了吗
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”)