| <html> |
| <head><title>messageport</title></head> |
| <body> |
| <script> |
| // Use onMessage handler with a null |sourcePort|. |
| window.addEventListener('message', onMessage.bind(null, null)); |
| |
| // Function for exercising bidirectional communication between JS content and |
| // For messages received on the window: |
| // * acknowledge receipt of MessagePort by sending "got_port <msg>" and |
| // including a MessagePort created in JS. |
| // For messages received on a MessagePort provided by the client: |
| // * acknowledge the message sent by the client by sending "ack <msg>" on |
| // the port used to received the message. |
| // * if a message port is provided, acknowledge receipt of MessagePort by |
| // sending "got_port <msg>" on that port, and include a MessagePort |
| // created in JS. |
| function onMessage(sourcePort, event) { |
| // Ack all messages received on message ports. |
| if (sourcePort) |
| sourcePort.postMessage('ack ' + event.data); |
| |
| // If the peer provided a MessagePort, acknowledge that we got it by |
| // sending "got_port" on it, along with a MessagePort that we create on the |
| // JS side. |
| if (event.ports && event.ports.length > 0) { |
| var chan = new MessageChannel(); |
| chan.port1.onmessage = onMessage.bind(null, chan.port1); |
| |
| event.ports[0].onmessage = onMessage.bind(null, event.ports[0]); |
| event.ports[0].postMessage('got_port', [chan.port2]); |
| } |
| } |
| </script> |
| </body> |
| </html> |