Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arcanis/jscomm
https://github.com/arcanis/jscomm
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/arcanis/jscomm
- Owner: arcanis
- Created: 2014-05-15T09:16:46.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2014-05-15T09:28:47.000Z (over 10 years ago)
- Last Synced: 2024-05-01T21:19:39.111Z (8 months ago)
- Language: JavaScript
- Homepage: http://arcanis.github.io/jscomm/example/client.html
- Size: 148 KB
- Stars: 0
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# JSComm
These libraries allow to easily share JS interfaces between a 'client' (a window) and a 'server' (another window), using secure postMessages.
## Usage
### Server
What we call *server* here is the window which will expose the API. Any class can be exposed using the `register()` method, but all of its methods have to take a callback as last parameter so that they can notify the client when they return.
A new instance of the API will be created for each window requesting it.
```js
var MathAPI = function ( ) { };
MathAPI.prototype.addition = function ( a, b, callback ) { callback( null, a + b ); };var server = new APIServer( );
server.register( 'math', MathAPI );
```### Client
The *client* is the window which will use the API. Before getting an hold on an API, you will have to open it before, by using the `use()` method of the APIClient class and passing it a callback. This callback will then be called when a bridge toward the server will be established. From this point, you will be able to use the remote API just like you would use a standard JS object (check the Limitations section for more informations).
```html
```
The client will be able to request then use an API exposed by `#api-server` using the following code :
```js
window.addEventListener( 'load', function ( ) {var target = document.getElementById( 'api-server' ).contentWindow;
var client = new APIClient( target );client.use( 'math', function ( err, api ) {
if ( err )
throw err;// The API can be used here, using the `api` parameter.
api.addition( 10, 10, function ( err, result ) {
alert( '10 + 10 = ' + result );
} );} );
} );
```## Limitations
- Exported API prototypes cannot be changed after beeing registered (they're frozen).
- You cannot return non-serializable values (ie. they have to be JSON-compatible).
- There is no way to have a synchronous communication between the client and the server.