我有一个web应用程序与内部窗格在一个外部窗口。
用户可以通过2指挤压放大内部窗格,而不需要放大外部窗口。
在Android上的Chrome上,该应用程序可以像预期的那样工作。
但是iOS设备(iPad)上的Safari,在内部窗格内放大,实际上放大了整个窗口,这不是预期的行为。
我在这里读到iphone/ipad可以触发意想不到的事件。
我想找到这个事件。
我将iPad连接到Macbook并通过Safari进行调试,从而远程调试iOS Safari web应用程序。
在Safari Web Inspector,Sources
选项卡,Breakpoints
部分,我添加了All Events
.
当我触摸窗格时,代码按预期在ontouchstart
事件上中断,这不是违规事件。
可以通过名称添加要中断的特定事件。
但是因为我不知道哪些是有问题的事件,所以我想在除ontouchstart
事件之外的所有事件上进行中断。
是否可以在Safari中除指定事件外的所有事件上停止?
感谢我不知道是否有可能在除特定事件之外的所有事件上中断。
我最近发现了这个链接,它全面地解释了Safari中的各种断点选项。
链接的作者亲切地回答了我的问题:
Currently there is no way to exclude specific events.
In your scenario, is it really necessary to add listeners for all events, or is it a known list of specific events (e.g. all touch and mouse)?
If it's the latter, I'd suggest just adding a global event listener breakpoint for each event other than the one event you want to exclude.
Another option might be to configure an All Events global event listener breakpoint with a condition of something like window.event.type !== "..."
(note that this will only work in Safari Technology Preview 114 or newer).
注。
我的问题的原因是上游违规事件侦听器。
因为问题发生在目标事件上游的事件侦听器中,所以在除特定事件之外的所有事件上中断是没有帮助的。
我最终通过使用passive = false
应用addEventListener解决了我最初的问题,并使用preventDefault()
来防止在冒泡阶段触发上游事件处理程序。