42 lines
912 B
HTML
42 lines
912 B
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<script type="application/javascript">
|
|
"use strict";
|
|
|
|
window.onload = () => {
|
|
opener.postMessage("ready", "*");
|
|
};
|
|
|
|
// eslint-disable-next-line no-shadow
|
|
function promiseMessage(source, filter = () => true) {
|
|
return new Promise(resolve => {
|
|
function listener(event) {
|
|
if (event.source == source && filter(event)) {
|
|
removeEventListener("message", listener);
|
|
resolve(event);
|
|
}
|
|
}
|
|
addEventListener("message", listener);
|
|
});
|
|
}
|
|
|
|
// Sends a message to the given target window and waits for the response.
|
|
function ping(target) {
|
|
let msg = { ping: Math.random() };
|
|
target.postMessage(msg, "*");
|
|
return promiseMessage(
|
|
target,
|
|
event => event.data && event.data.pong == msg.ping
|
|
);
|
|
}
|
|
|
|
function setFrameLocation(name, uri) {
|
|
window[name].location = uri;
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
</body>
|
|
</html>
|