加载具有与窗口顶相同协议的内嵌iframe以防止同源策略违反
Loading embedded iframe with same protocol as window top to prevent Same Origin Policy Violation
我们正在开发一个Javascript SDK,用于嵌入式应用程序(作为iframe注入我的网站),以帮助他们使用一些资源,如加载一些对话框:例如授权对话框或共享框(如Facebook)。
我们的SDK使用easyXDM或多或少像这样工作:
HTML Page
----------------------------------------------------------------------------------------------------------------------------
| http/https: www.mysite.com/embedded-app/
|(部分JS类)
|
|- - - - - | ------------------------------------------------------------------------------------------------------------------
|- - - - - | (IFRAME)
|- - - - - | https:// www.some-embedded-app-domain.com /page.html
|- - - - - |(从使用easyXDM的http/https:www.mysite.com/sdk.js加载并实例化SDK)
|- - - - - |
|- - - - - | - - - - - |---------------------------------------------------------------------------------------------------
|- - - - - | - - - - - | ( IFRAME注入easyXDM)
|- - - - - | - - - - - | http/https: www.mysite.com /embedded_provider.html
|- - - - - |- - - - - |(与窗口通讯。)上面要用那些窗口说话。)
|- - - - - |- - - - - |
|- - - - - |- - - - - |
|- - - - - |- - - - - |
|- - - - - |- - - - - |
我的网站可以使用http/https加载,但嵌入的应用程序必须使用总是 https服务。为了允许easyXDM注入的内部iframe与我的站点通信,主机和协议必须在两个url中匹配,否则会导致同源策略冲突。
问题:我如何告诉代码从SDK,这是从外部应用程序URL加载,外部窗口(我的网站)使用http或https,渲染embedded_provider.html使用相同的协议,从而允许两者之间的JS通信?
我能想到的唯一解决方案是以某种方式通知嵌入的应用程序,我们目前正在从http/https浏览,然后它可以正确地实例化它(使用标志use_https或之类),但我宁愿不强迫应用程序知道我们正在使用的协议。
你知道其他的选择吗?
谢谢!
我能想到的唯一解决方案(虽然还没有测试过)是将easyXDM放入两个测试iframe中-一个在http://www.mysite.com/url_test上,一个在https://www.mysite.com/url_test上。
然后让你的/url_test网页尝试访问window.top.location.href。如果/url_test可以看到位置,那么它必须在同一域中。然后,successfull/url_test页面将通过easyXDM与父iframe(在some-embedt-app.com上)通信,以在正确的主机上创建您真正想要的iframe。
注意:在不正确的主机上的/url_test页将开始在控制台中转储同源iframe警告。:)
注释#2:如果这种方法有效,你可以迭代地改进它,说:"因为产品领域,我知道这些嵌入的80%将在http上。我将首先在http上创建一个/url_test,然后尝试使用https作为备份。"
使用//http://或https://
浏览器会对它进行排序
- 防止Iframe窗体在新窗口中打开
- 将样式表插入iframe
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 使用jQuery从原始页面内容创建iframe
- Highslide(iframe的侦听器)
- iframe正在添加标签,需要删除它们
- 通过javascript/html访问twitter共享iframe
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 如何使用Angular动态添加iframe-src
- 由于iframe导致的问题
- 正在从页面中删除iframe
- 检测iframe是否跨域的愚蠢方法
- 绕过同源策略,从跨域iframe中获取页面的顶部URL
- 从另一个域的 iframe 中的代理访问父/原始 URL(同源策略)
- youtube javascript api如何在没有同源策略限制的情况下在iframe中与嵌入播放器通信
- IE中的iframe跨原点策略
- Iframe - location -同源策略
- 访问iframe中的按钮,解决同源策略
- 加载具有与窗口顶相同协议的内嵌iframe以防止同源策略违反
- 从Fancybox弹出窗口中调用警报功能- iFrame和同源策略