除非收到用户交互,否则 iframe 不会激活

iframe not active unless receives user interaction

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

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

除了在 iPhone 上使用网站时,一切正常。结果在目标 iframe 内的脚本 运行 中放置 alert 调用使其工作,但删除 alert 调用有点禁用目标 iframe那些跨源网络调用。

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

diodeus-james-macfarlane 的评论是我们最接近的评论,但是 iframe 被隐藏了,我们无法放置一个控件供用户与之交互,即使那只是为了它上班。

令我吃惊的是,关闭 SharePoint 网站上的设置使其生效。该设置围绕移动视图兼容性,没有它,iframe 能够发出 HTTP 请求,向父网页发送消息和从父网页接收消息。