1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
content / test / data / post_message.html [blame]
<html>
<head><title>Post message tests</title>
<script>
// Send a message to our opener, and it will reply.
function postToOpener(msg, origin) {
window.opener.postMessage(msg, origin);
return true;
}
// Send a message to our opener's opener.
function postToOpenerOfOpener(msg, origin) {
window.opener.opener.postMessage(msg, origin);
return true;
}
// Send a message to our parent's opener.
function postToOpenerOfParent(msg, origin) {
parent.opener.postMessage(msg, origin);
return true;
}
// Send a message to our parent's opener.
function postToOpenerOfSibling(siblingName, msg, origin) {
parent.frames[siblingName].opener.postMessage(msg, origin);
return true;
}
// Send a message to a window named "foo".
function postToFoo(msg) {
var w = window.open("", "foo");
w.postMessage(msg, "*");
return true;
}
function openPopup(url) {
popup = window.open(url);
}
function postToPopup(msg) {
popup.postMessage(msg, "*");
return true;
}
// Send a message to parent.
function postToParent(msg) {
parent.postMessage(msg, "*");
return true;
}
// Send a message to sibling.
function postToSibling(msg, sibling) {
parent.frames[sibling].postMessage(msg, "*");
return true;
}
// Send a message to a subframe of window named "foo".
function postToFooFrame(msg) {
var w = window.open("", "foo");
w.frames[0][0].postMessage(msg, "*");
return true;
}
function registerUnload() {
window.addEventListener('unload', function(e) {
postToParent("message-from-unload", "*");
});
}
// Listen to incoming messages.
var receivedMessages = 0;
var receivedMessagesWithPort = 0;
window.addEventListener("message", messageReceived, false);
function messageReceived(event) {
receivedMessages++;
if (event.data === "2-1-reply") {
event.source.postMessage("msg4", "*");
} else if (event.data === "subframe-msg") {
event.source.postMessage("subframe-msg-reply", "*");
} else if (event.data === "subframe-msg-reply") {
domAutomationController.send("done-" + window.name);
}
if (event.ports && event.ports.length > 0) {
receivedMessagesWithPort++;
var port = event.ports[0];
port.start();
port.postMessage("msg-back-via-port");
// Change the title to generate a notification.
document.title = event.data.message;
} else {
document.title = event.data;
}
}
</script>
</head>
</html>