This repository was archived by the owner on Oct 2, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathmessages.js
More file actions
73 lines (64 loc) 路 1.8 KB
/
Copy pathmessages.js
File metadata and controls
73 lines (64 loc) 路 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* Message Proxy
* Copyright (C) Codexa Organization 2013.
*/
function MessageProxy() {
var send, recv;
var messageHandlers = {};
var pub = this;
this.registerMessageHandler = function registerMessageHandler(callback, /*optional*/ key, /*optional*/ useOnce) {
// verify that callback is a function
if(typeof callback !== "function") {
throw new TypeError("callback must be a function");
}
// find unused key if not specified
if (!key) {
key = 0;
while(messageHandlers[key]) { key++ };
}
// register handler
messageHandlers[key] = {
callback: callback,
useOnce: !!useOnce
};
// return the used key
return key;
}
this.unRegisterMessageHandler = function unRegisterMessageHandler(key) {
messageHandlers[key] = undefined;
}
this.getMessageHandlers = function getMessageHandlers() {
return messageHandlers;
}
this.setMessageHandlers = function setMessageHandlers(_messageHandlers) {
messageHandlers = _messageHandlers;
}
this.postMessage = function postMessage(data) {
send.postMessage(data, "*");
}
this.setSend = function setSend(_send) {
send = _send;
}
function handler(e) {
if(e.source !== send) {
return;
}
// check for command
if(!messageHandlers[e.data.command]) {
throw new Error('No command registered: "' + e.data.command + '"');
}
// call correct callback
messageHandlers[e.data.command].callback(e);
// if command handler already removed return
if(!messageHandlers[e.data.command]) { return }
// if useOnce is specified, remove command handler
if(messageHandlers[e.data.command].useOnce) {
pub.unRegisterMessageHandler(e.data.command);
}
}
this.setRecv = function setRecv(_recv) {
if(recv) recv.removeEventListener("message", handler, false);
recv = _recv;
if(recv) recv.addEventListener("message", handler, false);
}
};