Могу ли я сравнить исходное окно из postMessage с моим window.frames?
Я хочу передать некоторую информацию из фрейма в его родительский объект (информация, которая недоступна из-за 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 ответ
postMessage
является частью HTML5
проект и, следовательно, поддерживается в новейших браузерах.
Спецификация говорит
атрибут источника должен быть установлен в объект WindowProxy глобального объекта скрипта
этот WindowProxy также является значением перечисления window.frame.
http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html