iPad / Safari滚动iframe不允许主页滚动(iframe本身正在滚动)

时间:2015-08-21 14:28:53

标签: javascript ipad iframe scroll safari

问题是什么:

不幸的是,我必须在Web解决方案中使用Iframe(租户范围内的SharePoint托管App与App部件)。 iframe需要大约50%的网站空间,并且主机中的空间将以编程方式放大,以便不会显示滚动条。它适用于除Safari之外的所有浏览器。在Safari中,触摸事件似乎被iframe窗口捕获,并且不会被转发到主机窗口。在iPad上想象一下:在超过50%的页面中,用户无法向下滚动页面。

我用于测试的硬件:

  • Windows 8.1(启用触摸的屏幕),最新版本的Safari(5.1.7)
  • iOS版本为8.4.1的iPad。

到目前为止我研究/尝试的内容:

  1. 这与“-webkit-overflow-scrolling:touch;”可以解决的所有问题无关。和类似的方法。根据我在研究中的理解,这将使iframe可滚动但我需要在iframe区域中移动手指时使主机窗口可滚动。在其他浏览器中,iframe例如向下滚动直到结束,然后开始滚动主机窗口

  2. 在某些帖子中,建议使用div(z-index:2)覆盖iframe,然后将点击事件从此覆盖div转发到Iframe窗口(我对此iframe窗口有控制权,所以我可以在那里捕捉事件)。重叠的div修复了我的测试页面上的滚动行为,但没有在我的目标应用程序中,因此它不是一个可靠的解决方案。除此之外:我管理了点击事件被触发(使用与3中相同的方法),但无法设法点击我的iframe页面中的链接(我需要...因为这就是我想要的原因要转发的点击次数。)

  3. 另一种方法是将触摸事件从Iframe页面转发到主页。我通过postMessages,JSON字符串化的事件参数和一个名为“jquery.simulate.js”的javascript库来完成此操作,该库用于模拟触摸事件。我没有设法在父窗口上正确触发touchmove事件(此外我怀疑这对用户体验和性能非常好)

  4. 我还想过从iframe中获取简单的html并以编程方式将其添加到主页。不幸的是,SharePoint托管的应用程序托管在其他子域上,因此由于跨浏览器限制,我认为不值得关注。

  5. 另一种方法是指针操作:无; - 这也打破了链接功能,不幸的是只在桌面上工作

  6. 设置scrolling =“no”(或“yes”)没有任何效果(可能是因为它已经在HTML5中消失了)

  7. 所以我在这里被卡住了...似乎世界上没有其他人有同样的问题,因为我无法在任何地方找到任何真正有用的想法。但我用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?

0 个答案:

没有答案