除非收到用户互动,否则iframe不会处于活动状态

时间:2018-12-20 15:52:14

标签: javascript iframe cross-domain mobile-safari

我一直在研究一项要求,该要求涉及网站获取/处理存储在不同域中的数据。除了在另一台服务器上启用CORS以允许我从其他域获取和修改数据外,似乎没有其他方法。但是,这导致Office 365应用程序出现了一些问题,我不得不采用其他方法。

该方法是使用postMessage与目标域上正在运行的页面上的隐藏iframe对话(不是一种好方法,但我坚持要使用它)。源页面将消息和有关REST调用的信息一起发布到隐藏的iframe,后者代表父页面发出请求,并使用postMessage返回结果。

一切正常,除了在iPhone上使用网站时。原来,在目标alert内运行的脚本中放置iframe个调用可以使其正常工作,但是删除alert调用则使目标iframe不能进行交叉源网络通话。

我的理论是,由于移动Safari的安全性,为了从运行在不同域上的iframe进行跨域调用,用户需要至少互动一次以表示同意与嵌入式iframe。听起来正确吗?

1 个答案:

答案 0 :(得分:0)

diodeus-james-macfarlane的评论是我们所能走的最接近的评论,但是iframe被隐藏了,我们不可能放置一个控件来让用户与之交互,即使那仅仅是为了使其起作用

令我惊讶的是,关闭SharePoint网站上的一项设置即可使其正常工作。该设置围绕移动视图兼容性进行,如果没有此设置,则iframe可以发出HTTP请求,与父网页之间收发消息。