我可以将postMessage的源窗口与window.frames进行比较吗?

时间:2011-07-17 14:20:45

标签: javascript html5 xss postmessage

我想将一些信息从一个帧冒泡到它的父对象(由于XSS而无法访问的信息)。

我可以将通过postMessage发送的source窗口与window.frames的值进行比较吗?

MDN(在上面的链接中)说该消息可以用于postMessage,但不是指测试是否相等。

这适用于IE9 FF5和Chrome12,但我想知道这是否可靠(即它是否符合标准)。

测试代码:

postMessageOuter.html

<!DOCTYPE html>
<html>
<head>
    <title>Outer Page</title>
    <script type="text/javascript">
        window.addEventListener("message", function (event) {
            for (var i = 0; i < frames.length; ++i)
                if (event.source == frames[i])
                    alert(i);
        }, false);
    </script>
</head>
<body>
<iframe src="postMessageInner.html"></iframe>
<iframe src="postMessageInner.html"></iframe>
<iframe src="postMessageInner.html"></iframe>
</body>
</html>

postMessageInner.html

<!DOCTYPE html>
<html>
<head>
    <title>Inner Page</title>
    <script type="text/javascript">
        function foo() {
            window.parent.postMessage("Hello", "*");
        }
    </script>
</head>
<body>
<input type="button" value="X" onclick="foo()" />    
</body>
</html>

1 个答案:

答案 0 :(得分:1)

postMessageHTML5草稿的一部分,因此在最新的浏览器中得到支持。

规范说

  

必须将source属性设置为脚本的全局对象的WindowProxy对象

此WindowProxy也是window.frame枚举的值。

http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages