我注意到在我的角度应用程序中,属性
window.navigator.pointerEnabled
返回true
现在,因为我想做一些涉及.net内的指针事件jsfiddle
的测试,所以我注意到这些事件不存在。pointerEnabled
这可能与属性在这里的事实有关undefined
。
我的问题是,这个属性是如何控制的,我该如何启用它?
我注意到在我的角度应用程序中,属性
window.navigator.pointerEnabled
返回true
现在,因为我想做一些涉及.net内的指针事件jsfiddle
的测试,所以我注意到这些事件不存在。pointerEnabled
这可能与属性在这里的事实有关undefined
。
我的问题是,这个属性是如何控制的,我该如何启用它?
如果您在 Firefox 中测试您的代码,则需要配置浏览器以启用指针事件,因为目前默认情况下未启用它们(截至 2017.xi.15,我当前的最新升级是 Firefox Quantum 57.0.2 (64 位),我在这里发布的内容可能会在以后的版本中更改!)。
为此,您必须启动一个新选项卡,并在地址栏中键入“about:config”。然后,搜索条目:
dom.w3c_pointer_events.enabled
并将此布尔值的状态更改为 true。
除非您这样做,否则 Firefox 将根本不会处理指针事件。这可能会在未来发生变化,但目前请注意,如果您对跨浏览器兼容性感兴趣,指针事件处理可能是一个雷区。例如,在我的机器上运行的最新版本的 Chrome,即版本 63.0.3239.84(官方构建)(64 位),无需潜入并重新配置浏览器即可处理指针事件,但 Firefox 让我头疼不已,直到我发现了上述配置问题,类似的问题也可能出现在其他浏览器上。
更复杂的是,Windows 版本的 Firefox 允许您启用指针事件,但在 Firefox Mobile for Android 版本的浏览器上尚不支持它们。因此,当一个浏览器更改平台时,同一个浏览器的行为可能会有所不同,这只会增加您的编码噩梦。
我不熟悉 Safari 或 Opera,但强烈建议这些浏览器的用户在使用指针事件时检查是否存在类似的支持问题!
因此,如果浏览器从一开始就没有启用指针事件,那么无论您是尝试本地处理指针事件还是通过 Angular 等框架处理指针事件都无关紧要。我在这个问题上浪费了几个小时,并认为避免其他人遭受同样的挫折是个好主意。
当然,这不会解决您的最终用户不知道这一点的问题,并且您的应用程序在他们尝试运行它而不配置他们的浏览器时在他们的系统上失败。或者,更糟糕的是,您的应用程序失败是因为他们的浏览器根本不支持指针事件(例如,我上面引用的适用于 Android 的 Firefox Mobile)。最终用户希望应用程序开箱即用,无论他们选择何种硬件和浏览器,但要实现这一点,您目前需要协商一些令人讨厌的障碍。其中之一是触摸事件支持也隐藏在 Firefox 中的配置标志后面,因此您甚至不能保证在不支持指针事件的情况下回退到单独的触摸事件将使您的应用程序免于失败。
目前,唯一在这方面保持跨平台一致性的主流浏览器是 Chrome。当我启动 Chrome 时,我使用指针事件编写的代码在台式机和平板电脑上都可以工作,但我现在知道,当我尝试在药片。
除了上述问题之外,可能还有其他问题在等着您(尤其是如果您还使用新的 CSS 指针事件功能!),但它们已适当地保留给其他地方。
指针事件 提供了一种使用一个界面处理鼠标和触摸事件的新方法。目前对指针事件的支持仍然很少。目前,IE11 和 Edge 有直接支持,IE10 带有前缀。FF 和 Chrome (>=53) 正在积极开发它并将其隐藏在标志后面(参见:)chrome://flags/#enable-pointer-events
。到目前为止,Safari 还没有公开信号。
无法为您的用户激活或停用它。浏览器支持或不支持。
window.navigator.pointerEnabled
是检查浏览器是否支持它的不推荐使用的方法。推荐的方法是检查是否window.PointerEvent
已定义。
有一个polyfill,支持 FF、CH、IE10 和 Safari。