当连接到iOS设备上的IFrame内的窗口时,触摸事件touchstart
或者touchend
不触发事件.
这是一个非常简单的例子:
parent.html
Touch Test
child.html
Touch Test Clicks/touches on the viewport should add some text entries...
我在IFrames中找到了有关iOS上滚动问题的多个问题,有些关于事件的问题,但似乎没有一个问题可以解决我现在遇到的问题.
我为每个人创建了一个CodePen和一个JSFiddle,它们显示了完全相同的行为,因为它们都在IFrame中执行代码.
解决方案1: 在iframe内部,向文档对象添加一个虚拟侦听器:
document.addEventListener('touchstart', {}); // in iframe
似乎IOS上的Safari拒绝将侦听器触摸到窗口,除非其他DOM对象也有侦听器.
解决方案2: 在顶部窗口内,向任何对象(包括窗口)添加一个虚拟侦听器:
window.addEventListener('touchstart', {}); // in top window
似乎IOS上的Safari拒绝在iframe中触摸侦听器窗口,除非父级也有侦听器.
上述任何一种解决方案都有效(它们不是都需要,只有一种).测试:
Safari 9.0/IOS:9.3.5
Safari 11.0/IOS:11.3