我们遇到过类似的问题,它表现为浏览器缩放但 javascript 没有接收到触摸事件(或者有时只是缩放开始前的一个点)。
我们已经找到了这些可能的(但可能不是长期的)解决方案:
1.使用展台模式时禁用捏合/滑动功能
如果这些命令行设置保留在 Chrome 中,您可以执行以下操作:
chrome.exe --kiosk --incognito --disable-pinch --overscroll-history-navigation=0
-
--disable-pinch - 禁用捏合缩放功能
-
--overscroll-history-navigation=0 - 禁用滑动导航功能
2。使用 Chrome 标志 chrome://flags/#enable-pinch
禁用捏缩放
在浏览器中导航到 URL chrome://flags/#enable-pinch 并禁用该功能。
捏缩放功能目前是实验性的,但默认开启,这可能意味着它将在未来的版本中强制启用。如果您处于自助服务终端模式(并控制硬件/软件),您可能会在安装时切换此设置,然后阻止 Chrome 继续更新。
Chromium Issue 304869 已经有一份移除此设置的路线图票证。
浏览器在 javascript 可以阻止它之前做出反应的事实绝对是一个错误,并已记录在 Chromium bug tracker。希望它会在永久启用该功能之前得到修复,或者他们会将其保留为设置。
3.禁用与您的应用匹配的元素和事件的所有触摸、白名单
在我们进行的所有测试中,将 preventDefault() 添加到文档会停止 Chrome 中的缩放(以及所有其他滑动/触摸事件):
document.addEventListener('touchstart', function(event){
event.preventDefault();
}, {passive: false});
如果您在 DOM 中将基于触摸的功能附加到更高的位置,它将在冒泡到文档的 preventDefault() 调用之前激活。在 Chrome 中,包含 eventListenerOptions 参数也很重要,因为从 Chrome 51 开始,document-level event listener is set to {passive: true} by default。
这会禁用正常的浏览器功能,例如滑动滚动,但您可能必须自己实现这些功能。如果它是一个全屏、不可滚动的自助服务终端应用,也许这些功能并不重要。