如何在子窗口中唯一标识iframe?

时间:2013-01-14 16:37:18

标签: html5 internet-explorer opera session-storage sessionstorage

我们有以下情况:

Iframe由一个域(A)中的页面嵌入和控制。

我们无权更改域A的代码。

Iframe中的内容是从另一个域(B)传送的。

我们正在使用sessionstorage来处理Iframe中的所有会话变量。

有一种Comet风格推动可以为Iframe提供实时更新,并且我们需要能够唯一地识别每个Iframe。

为此,我们在sessionStorage变量中存储了一个唯一的ID,当然这也存在问题。

在域名A使用“window.open”打开子窗口之前一切正常 我们最终得到以下情况。

+----------+                +----------+
| A        |                | A        |
| +------+ |                | +------+ |
| | B (1)| | window.open -> | | B (2)| |
| +------+ |                | +------+ |
+----------+                +----------+

当加载B(2)时,会话存储的处理如下:

IE 8,9,10: sessionstorage[B1] is copied to sessionstorgage[B2]
Firefox:   sessionstorgage[B2] is uninitialized (this is OK)
Chrome:    sessionstorage[B1] is copied to sessionstorgage[B2]
Safari:    sessionstorage[B1] is copied to sessionstorgage[B2]
Opera:     sessionstorage[B1] is shared (ie the same) as sessionstorgage[B2]
           (a change in one will appear in the other - is this a bug?)

所以......在大多数浏览器中克隆了唯一的ID(或者在Opera的情况下共享)

Opera 中,因为它似乎共享会话存储,所以可能没有解决方案。

Firefox 中,我们就像一个全新的窗口,所以没有问题。

Safari Chrome 中,我们可以执行以下操作

if (window.opener)
{
    if (window.opener.frames.THE_IFRAME.sessionstorage.THE_UNIQUE_ID ==
        sessionstorage.THE_UNIQUE_ID)
    ... get a new unique ID ...
}

IE 中,我们无法访问window.opener.frames.THE_IFRAME,因为由于跨域限制,它不允许我们在window.opener中访问任何内容。< / p>

任何关于如何在IE中工作的建议(我们可以在没有Opera支持的情况下生活),或者为了更好的解决方案,我们将不胜感激。

0 个答案:

没有答案