我想将一些信息从一个帧冒泡到它的父对象(由于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>
答案 0 :(得分:1)
postMessage
是HTML5
草稿的一部分,因此在最新的浏览器中得到支持。
规范说
必须将source属性设置为脚本的全局对象的WindowProxy对象
此WindowProxy也是window.frame枚举的值。
http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages