0

我们正在开发嵌入式应用程序(作为 IFRAME 注入我的网站)使用的 Javascript SDK,以帮助他们使用一些资源,例如加载一些对话框:例如授权对话框或共享框(如 Facebook)。

我们的 SDK 使用 easyXDM 或多或少地像这样工作:

HTML 页面
------------------------------------------------ -------------------------------------------------- --------------------------
| 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)
|- - - - - |
|- - - - - | - - - - - |----- -------------------------------------------------- ------------------------------------------
|- - - - - | - - - - - | (easyXDM注入的IFRAME)
|- - - - - | - - - - - | http / https: www.mysite.com /embedded_provider.html
|- - - - - | - - - - - | (与 window.top 通信以使用那些 wndow.top JS 类)
|- - - - - | - - - - - |
|- - - - - | - - - - - |
|- - - - - | - - - - - |
|- - - - - | - - - - - |

我的网站可以同时使用 http/https 加载,但嵌入式应用程序必须始终使用HTTPS 提供服务。为了让easyXDM注入的内部iframe与我的站点通信,两个url中的主机和协议必须匹配,否则会出现同源策略违规。

问题:我如何告诉从外部应用程序 URL 加载的 SDK 中的代码,外部窗口(我的站点)正在使用 http 或 https,以使用相同的协议呈现 embedded_provider.html,从而允许 JS 通信他们两个之间?

我能想到的唯一解决方案是以某种方式通知嵌入式应用程序我们当前正在从 http / https 浏览,然后它可以正确实例化它(使用标志 use_https 左右),但我宁愿不强制应用程序来了解我们正在使用的协议。

你知道还有其他选择吗?

谢谢!

4

2 回答 2

1

我能想到的唯一解决方案(虽然还没有测试过)是让 easyXDM 放入 2 个测试 iframe - 一个在http://www.mysite.com/url_test上,一个在https://www.mysite 上。 com/url_test

然后让您的 /url_test 网页尝试访问 window.top.location.href。如果 /url_test 可以看到该位置,则它必须在同一个域上。然后成功的 /url_test 页面将通过 easyXDM 与父 iframe(在 some-embedded-app.com 上)通信,以在正确的主机上创建您真正想要的 iframe。

注意:错误主机上的 /url_test 页面将开始在控制台中转储同源 iframe 警告。:)

注意#2:如果这种方法有效,您可以通过说“由于产品域,我知道这些嵌入中的 80% 将在 http 上进行迭代改进。我将首先在 http 上创建 /url_test,然后尝试https 作为备份。”

于 2013-07-16T21:01:13.070 回答
0

使用 // 代替 http:// 或 https://

浏览器会整理出来

于 2013-03-01T18:47:42.603 回答