由于负载平衡,在iframe内关闭父iframe窗口(jquery ui对话框),在不同的域上

时间:2013-01-15 14:55:12

标签: jquery iframe cross-domain jquery-ui-dialog load-balancing

我有一个带有iframe的jQuery UI对话框。我正在iframe中加载另一个页面,该页面与父项不在同一个域中。这两个页面是两个不同的系统,System1(父级)和System2(iframe中的子级)。

我想要做的是在iframed页面上添加一个按钮,该按钮调用JS / jQuery来关闭父页面上的acctual对话框窗口。

他们在这里做的事情:Close jQuery UI Dialog from Iframe

问题是,这仅适用于由于Same origin policy

而两个页面位于同一域中的情况

这是我当前的按钮,当两个系统位于同一个域时,它可以正常工作:

<input type="submit" onclick="$('#myDialog', window.parent.document).hide();" value="X" />

站点/系统实际上可能位于同一服务器和域上,但我使用负载均衡器在3个不同的服务器之间移动流量。 所以有两个系统,每个系统在三台服务器上运行。下面,端口对应于不同的系统(91 = System1,92 = System2)。

这些系统通过转到http://System1.myHost.comhttp://System2.myHost.com进行负载平衡,负载均衡器决定将用户发送到哪个服务器。

问题是:当用户转到http://System1.myHost.com(例如实际上是在Server1上)并且jQuery / iframe尝试加载匹配的System2站点(在本例中也是在Server1上)时,Javascript认为http://System1.myHost.com(实际上是http://Server1.myHost.com:91)和http://Server1.myHost.com:92位于两个不同的域中。

不知何故,我需要欺骗Javascript认为负载均衡器地址与实际服务器地址相同,但我不知道如何......

关于如何解决这个问题的任何想法? =)

1 个答案:

答案 0 :(得分:0)

你不能“欺骗”JavaScript忽略相同的原始政策,如果这样的政策可能没用。

负载均衡对最终用户应该是透明的。您应该考虑在负载平衡服务器前使用前端缓存系统,如Velocity或Memcached。