| <!DOCTYPE html> |
| <script> |
| const windowProps = ["innerWidth", "innerHeight"]; |
| const windowPropsObj = {}; |
| const channelName = location.search.substr(1); |
| const channel = new BroadcastChannel(channelName); |
| for (const prop of windowProps) { |
| windowPropsObj[prop] = window[prop]; |
| } |
| channel.postMessage(windowPropsObj); |
| |
| // Because messages are not delivered synchronously and because closing a |
| // browsing context prompts the eventual clearing of all task sources, this |
| // document should not be closed until the opener document has confirmed |
| // receipt. |
| channel.onmessage = () => { window.close() }; |
| </script> |