Chrome 更新破坏了我的"设备运动"事件处理程序



在我的网站上,我有一些Javascript已经运行了一年多了(据我所知,我为它能在每个浏览器中工作而感到自豪)。但最近它突然坏了,经过一些调试,我发现了这个。

我有一些代码创建了一个事件处理程序,如下所示:

window.addEventListener(
    'devicemotion',
    function (e) { ... },
    false
);

这个处理程序用于处理设备加速,但由于某种原因,在最近的Chrome更新中,我的所有电脑(笔记本电脑、台式机等)都会调用这个处理程序,而不仅仅是我的移动设备。据我所知,这些设备中没有一个装有加速度计,而且这个处理程序过去从未在它们上执行过。

有人能解释一下为什么这种行为发生了变化吗?这个处理程序在台式电脑上被调用似乎非常违反直觉。我试着在Chrome中搜索关于这一点的更新,但我对搜索Chrome或Chromium repos/源代码并不熟悉。

根据r196645,谷歌希望修复对设备方向API的设备运动部分的支持。

W3C规范草案称:

无法提供所有三个角度的实现必须将未知角度的值设置为null。如果提供了任何角度,则必须适当设置绝对属性。如果实现永远不能提供方向信息,则应在所有属性都设置为null的情况下激发事件。

为了纠正设备方向API的这一部分,他们打开了r263415并告诉chrome在所有设备上触发devicemotion事件,只传递W3C规范草案中指定的空值。

这就是这种行为改变的原因。

如果将侦听器封装在if浏览器宽度/导航器语句中,该怎么办?我知道这并不理想,但铬最近确实出现了很多问题。我目前正遭受一个无法治愈的错误(或者看起来就是这样),我的控制台一直保持空白,我必须使用canary来执行任何调试任务。

相关内容

  • 没有找到相关文章

最新更新