【发布时间】:2012-03-05 06:57:01
【问题描述】:
我的一位客户遇到了一些奇怪的问题,该问题是嵌入在 iframe 中的 flash 对象,该对象调用 PHP 脚本并传递了 POST 变量。
我想我终于大致弄清楚了发生了什么,但希望能澄清我的预感是否正确。
设置有点复杂,请多多包涵……
她的网站使用其中一种网站构建器设置,因此它的功能有点受限。她想包含我的 Flash 应用程序,但不能,因此作为一种变通方法,她将 Flash 应用程序放在另一个域中,然后将其嵌入到 iframe 中。
Flash 应用程序所做的部分工作是打开一个单独的窗口,然后调用 PHP 脚本,将 POST 变量传递给它。
在 Chrome、Safari 和 Firefox 上都可以使用。在 IE 上,好像没有发布任何 POST 变量。
通过 HTTP 嗅探器,我能够确认变量确实已发送,但结果清楚地表明 PHP 脚本没有看到它们。
这真的让我发疯了,直到我想起这里有两个不同的域。
还记得她是如何将来自一个域的内容嵌入到另一个域的 iframe 中的吗?
所以我认为这是导致 POST 数据在服务器端被阻止的跨域安全问题。
但是为什么它在其他浏览器中也能工作呢?
这是我的理论...
在 Chrome、Firefox 和 Safari 中,浏览器将数据发送到脚本,其中 IFrame 内的页面作为发起者。因此,发起者和目标脚本在同一个域中。
在 IE 中,浏览器将数据发送到以 CONTAINER 页面为发起者的脚本。在这种情况下,发起者和目标脚本位于不同的域中,服务器会阻止数据。
那么,你怎么看?这听起来像是一个有效的解释吗?这是 IE 的已知功能吗?在这种情况下,符合标准的浏览器应该做什么?
更新:
事实证明,问题不仅仅在于跨域。即使 iframe 内容来自同一个站点,它仍然会发生。虽然只在 IE 中。很奇怪吧?
【问题讨论】:
标签: flash internet-explorer post iframe cross-domain