Internet Explorer,Flash POST变量和IFRAMES

时间:2012-02-13 20:55:53

标签: flash internet-explorer post iframe cross-domain

我遇到了一个客户,他在iframe中嵌入了一个flash对象时遇到了一些奇怪的问题,这个问题称为PHP脚本并传递了POST变量。

我想我终于弄清楚了发生了什么,但希望澄清我的预感是否正确。

设置有点复杂所以请耐心等待......

她的网站使用其中一个网站构建器设置,因此它的功能有限。她想要包含我的Flash应用程序,但不能,所以作为一种解决方法,她将Flash应用程序放在另一个域上,然后将其嵌入到iframe中。

Flash应用程序的部分功能是打开一个单独的窗口,然后调用PHP脚本,将POST变量传递给它。

在Chrome,Safari和Firefox上可以使用。在IE上,就好像没有发布POST变量一样。

使用HTTP嗅探器,我能够确认变量确实已发送,但结果清楚地表明PHP脚本没有看到它们。

这真让我疯了,直到我记得这里有两个不同的域名。

还记得她是如何将来自一个域的内容嵌入到不同域中的iframe中的吗?

所以我认为这是一个跨域安全问题导致POST数据在服务器端被阻止。

但是为什么它可以在其他浏览器中运行?

这是我的理论......

在Chrome,Firefox和Safari中,浏览器会将数据发送到脚本,并将页面INSIDE作为发起人。因此,发起者和目标脚本位于SAME域上。

在IE中,浏览器将数据发送到脚本,并将CONTAINER页面作为发起者。在这种情况下,发起方和目标脚本位于不同的域上,服务器会阻止数据。

那么,您怎么看?这听起来像是有效的解释吗?这是IE的已知功能吗?在这种情况下,符合标准的浏览器应该做什么?

更新:

事实证明,问题不仅仅是针对跨域问题。即使iframe内容来自SAME网站,它仍然会发生。仅在IE中。奇怪吧?

1 个答案:

答案 0 :(得分:0)

我过去曾解决过Flash跨域问题,但没有遇到过这种特殊情况。我不认为她的网站构建器会允许将跨域策略文件部署到其网站的根目录吗?

如果是这样,您可以尝试部署crossdomain.xml:

<cross-domain-policy>
<allow-access-from domain="*.flashfiledomain.com" secure="false"/>
</cross-domain-policy>

...到她网站的根目录,看看是否能解决问题。我假设Flash文件和PHP脚本都在同一个域上?