Могу ли я сравнить исходное окно из postMessage с моим window.frames? - PullRequest
0 голосов
/ 17 июля 2011

Я хочу передать некоторую информацию из фрейма в его родительский объект (информация, которая недоступна из-за XSS).

Могу ли я сравнить окно source, отправленное через postMessage до значений 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 Ответ

1 голос
/ 17 июля 2011

postMessage является частью черновика HTML5 и поэтому поддерживается в новейших браузерах.

В спецификации сказано:

атрибут источника должен быть установлен как глобальный скриптобъект WindowProxy объекта

этот WindowProxy также является значением перечисления window.frame.

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

...