Skip to content

Instantly share code, notes, and snippets.

@nybatista
Forked from tuan/host.js
Created January 4, 2018 19:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nybatista/67fa1de32352cb4fed8a7964892d8d55 to your computer and use it in GitHub Desktop.
Save nybatista/67fa1de32352cb4fed8a7964892d8d55 to your computer and use it in GitHub Desktop.
RxJs and window's postMessage for intercommunication
import * as Rx from "rxjs/Rx";
import * as uuid from "uuid";
import {IRequest} from "./common";
let button = document.querySelector("button");
let iframe = document.createElement("iframe");
iframe.src = "/proxy.html";
document.body.appendChild(iframe);
button.onclick = function() {
request("https://request.url");
};
function request(url: string) {
const requestId = uuid.v4();
const req: IRequest = {
id: requestId,
payload: {
url
}
};
iframe.contentWindow.postMessage(req, "*");
return Rx.Observable.fromEvent(window, "message")
.filter((messageEvent: MessageEvent) => messageEvent.data && messageEvent.data.id === requestId)
.map((messageEvent: MessageEvent) => messageEvent.data));
}
import * as Rx from "rxjs/Rx";
import {IResponse} from "./common";
const messages = Rx.Observable.fromEvent(window, "message")
.filter((messageEvent: MessageEvent) => messageEvent.data && !!messageEvent.data.id);
messages.subscribe((event: MessageEvent) => {
const response: IResponse = {
id: event.data.id,
payload: event.data.payload
};
event.source.postMessage(response, event.origin);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment