问题是什么:
不幸的是,我必须在Web解决方案中使用Iframe(租户范围内的SharePoint托管App与App部件)。 iframe需要大约50%的网站空间,并且主机中的空间将以编程方式放大,以便不会显示滚动条。它适用于除Safari之外的所有浏览器。在Safari中,触摸事件似乎被iframe窗口捕获,并且不会被转发到主机窗口。在iPad上想象一下:在超过50%的页面中,用户无法向下滚动页面。
我用于测试的硬件:
到目前为止我研究/尝试的内容:
这与“-webkit-overflow-scrolling:touch;”可以解决的所有问题无关。和类似的方法。根据我在研究中的理解,这将使iframe可滚动但我需要在iframe区域中移动手指时使主机窗口可滚动。在其他浏览器中,iframe例如向下滚动直到结束,然后开始滚动主机窗口
在某些帖子中,建议使用div(z-index:2)覆盖iframe,然后将点击事件从此覆盖div转发到Iframe窗口(我对此iframe窗口有控制权,所以我可以在那里捕捉事件)。重叠的div修复了我的测试页面上的滚动行为,但没有在我的目标应用程序中,因此它不是一个可靠的解决方案。除此之外:我管理了点击事件被触发(使用与3中相同的方法),但无法设法点击我的iframe页面中的链接(我需要...因为这就是我想要的原因要转发的点击次数。)
另一种方法是将触摸事件从Iframe页面转发到主页。我通过postMessages,JSON字符串化的事件参数和一个名为“jquery.simulate.js”的javascript库来完成此操作,该库用于模拟触摸事件。我没有设法在父窗口上正确触发touchmove事件(此外我怀疑这对用户体验和性能非常好)
我还想过从iframe中获取简单的html并以编程方式将其添加到主页。不幸的是,SharePoint托管的应用程序托管在其他子域上,因此由于跨浏览器限制,我认为不值得关注。
另一种方法是指针操作:无; - 这也打破了链接功能,不幸的是只在桌面上工作
设置scrolling =“no”(或“yes”)没有任何效果(可能是因为它已经在HTML5中消失了)
所以我在这里被卡住了...似乎世界上没有其他人有同样的问题,因为我无法在任何地方找到任何真正有用的想法。但我用iframe测试了大约20个不同的网站 - 我用桌面触控和iPad进行了测试......我遇到了同样的问题。在所有建议和可能的解决方案中,我找不到一个Safari-Touch工作iframe。
如何重现: 一个简单的
<iframe src="http://www.w3schools.com"></iframe>
嵌入任何具有长内容的html页面,Safari和触摸设备(类似于我用于测试的那些)应该足以重现。
我想知道的事情:
编辑:(解决方案编号2)覆盖div使得页面确实也可以在Safari中滚动,但我找不到如何将click事件成功转发给子项的正确方法(意思是:哪个事件参数是是否需要转发以触发子窗口中的click事件?)
编辑:再次搜索,发现由于安全原因,您无法以编程方式创建事件。这是有道理的,因为如果您可以强制用户点击您的广告,这将是一个很大的安全问题。 How can I click on specific (x,y) coordinates on a web page?