Giter Club home page Giter Club logo

postmessage-json-rpc's Introduction

postmessage-json-rpc Build Status Coverage Status

JSON-RPC over window.postMessage, with a Promise-based API.

This package provides a server and client written in JavaScript that can communicate with each other across browser windows or iframes using a subset of JSON-RPC 2.0.

Code Example

ES2015

import {Client, Server} from 'postmessage-json-rpc';
const client = new Client();
const server = new Server({
	hello(who) {
		return Promise.resolve(`Hello ${who}!`);
	}
});

client.mount(window);
server.mount(window);

client.request('hello', window, 'world, of course')
	.then(answer => console.log(answer));

// Hello world, of course!

ES5

var rpc = require('postmessage-json-rpc');
var client = new rpc.Client();
var server = new rpc.Server({
	hello: function(who) {
		return Promise.resolve('Hello ' + who + '!');
	}
});

client.mount(window);
server.mount(window);

client.request('hello', window, 'world, of course').then(function (answer) {
	return console.log(answer);
});

// Hello world, of course!

Motivation

I had a need to quickly "componentize" a legacy web app from an older project, so I could run it in an iframe in a new project and invoke bits of its internal API. I implemented a basic RPC server (for the legacy app) and client (for the host app) using window.postMessage/window.onmessage as the communication channel and (at the moment, loosely) JSON-RPC 2.0 as the message format, and that became the basis of postmessage-json-rpc.

There were already some libraries that did something like this, but I really wanted a fully Promise-based async API on both the client and server side. So I coded one myself ๐Ÿ˜„

Status/Caveats

The JSON-RPC 2.0 implementation here is not complete, in that batch requests (at least) are not implemented, and there may be some other subtle discrepancies at the moment. Still, for what it does, the module is quite usable.

Installation

npm install --save postmessage-json-rpc

Use Browserify / Webpack to include this module in your front-end code.

API Reference

Basic documentation is available on GitHub.

Tests

Clone this repo, and then run:

npm install
karma start --single-run

Contributors

I welcome and greatly appreciate bug reports, feature ideas, and pull requests in all areas.

License

MIT

postmessage-json-rpc's People

Contributors

motiz88 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.