Home

Awesome

NPM Version NPM Downloads Build Status devDependency Status

postmessage-client-server

A simple promise-based client and server to communicate between pages and iframes with postmessage.

All data passed will be serialized with JSON.

Installation

In your project dir:

npm install --save postmessage-client-server

Server

In your page the iframe will load on your server:

import {server} from 'postmessage-client-server';

server({
  // Include any methods you wish to call from the client
  bark(thing) {
    console.log('SERVER: Bark at', thing);
    return 'Barked at ' + thing;
  },
  sniff() {
    console.log('SERVER: Sniffing...');
    return ['grass', 'ball'];
  },
  beBad() {
    console.log('SERVER: About to misbehave...');
    throw 'Eating shoe';
  }
});

Client

On your client webpage:

import {client} from 'postmessage-client-server';

const urlToServerPage = 'http://mycorp.com/serverFrame.html';

client(urlToServerPage) // adds an iframe to the given url in your page
  .then(send => {
    // now we have our send function: send(method, args)
    send('sniff')
      .then(stuffSmelt => {
        console.log('CLIENT: We smelt:', stuffSmelt);
        stuffSmelt.forEach(item => {
          send('bark', item)
            .then(result => {
              console.log('CLIENT: Bark result:', result);
            });
        });
        send('beBad')
          .then(() => {
            console.log('CLIENT: Not punished');  // won't happen
          }, reason => {
            console.log('CLIENT: Got punished for', reason);
          });
      });
  });

Output

The console output from the above example would be:

SERVER: Sniffing...
CLIENT: We smelt: ["grass", "ball"]
SERVER: Bark at grass
SERVER: Bark at ball
SERVER: About to misbehave...
CLIENT: Got punished for Eating shoe
CLIENT: Bark result: Barked at grass
CLIENT: Bark result: Barked at ball 

Remember that the calls are asynchronous, so the order may vary.


Module submitted by Erik Rasmussen @erikras