除非收到用户交互,否则 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 请求,向父网页发送消息和从父网页接收消息。
我一直在处理涉及网站 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 请求,向父网页发送消息和从父网页接收消息。