Skip to content
This repository was archived by the owner on Jan 31, 2025. It is now read-only.

Commit 7cdc3fb

Browse files
author
Daniel Brain
committed
More logging and features
1 parent 9e32ff5 commit 7cdc3fb

File tree

2 files changed

+67
-9
lines changed

2 files changed

+67
-9
lines changed

index.js

+66-8
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,38 @@
1010

1111
function noop() {}
1212

13+
function _log(level, args) {
14+
15+
args = Array.prototype.slice.call(args);
16+
args.unshift('[post-robot]');
17+
args.push(window.location.href);
18+
if (window.name) {
19+
args.push(window.name);
20+
}
21+
22+
if (!window.console) {
23+
return;
24+
}
25+
26+
if (!window.console[level]) {
27+
level = 'log';
28+
}
29+
30+
if (!window.console[level]) {
31+
return;
32+
}
33+
34+
window.console[level].apply(window.console, args);
35+
}
36+
37+
function log() {
38+
_log('log', arguments);
39+
}
40+
41+
function logError() {
42+
_log('error', arguments);
43+
}
44+
1345
if (!window.postMessage) {
1446

1547
if (window.console && window.console.warn) {
@@ -42,6 +74,7 @@
4274

4375
var requestListeners = {};
4476
var responseHandlers = {};
77+
var mockRequestListeners = {};
4578
var proxies = [];
4679

4780
var parent;
@@ -66,8 +99,7 @@
6699
}
67100

68101
function sendMessage(win, message) {
69-
console.error('%% send', message);
70-
102+
log('#send', message.type, message.name, message);
71103
win.postMessage(JSON.stringify(message), '*');
72104
}
73105

@@ -81,7 +113,10 @@
81113
throw new Error('Expected options.name');
82114
}
83115

84-
if (typeof options.window === 'string') {
116+
if (requestListeners[options.name] && requestListeners[options.name].mock) {
117+
options.window = window;
118+
119+
} else if (typeof options.window === 'string') {
85120
var el = document.getElementById(options.window);
86121

87122
if (!el) {
@@ -169,7 +204,7 @@
169204
throw new Error('Expected options.name');
170205
}
171206

172-
if (requestListeners[options.name]) {
207+
if (requestListeners[options.name] && !options.override) {
173208
throw new Error('Post message response handler already registered: ' + options.name);
174209
}
175210

@@ -188,10 +223,18 @@
188223
if (options.window.closed) {
189224
clearInterval(interval);
190225
delete requestListeners[options.name];
191-
options.handler(new Error('Post message target window is closed'), null, noop);
226+
options.handler(new Error('Post message target window is closed'), null, function(err) {
227+
logError('Unhandled error', err.stack || err.toString());
228+
});
192229
}
193230
}, 50);
194231
}
232+
233+
return {
234+
cancel: function() {
235+
delete requestListeners[options.name];
236+
}
237+
};
195238
}
196239

197240
function quickPostMessageListen(name, options, callback) {
@@ -204,7 +247,7 @@
204247
options.name = name;
205248
options.handler = options.handler || callback;
206249

207-
postMessageListen(options);
250+
return postMessageListen(options);
208251
}
209252

210253
function quickPostMessageListenOnce(name, options, callback) {
@@ -216,7 +259,19 @@
216259

217260
options.once = true;
218261

219-
quickPostMessageListen(name, options, callback);
262+
return quickPostMessageListen(name, options, callback);
263+
}
264+
265+
function quickPostMessageListenMock(name, options, callback) {
266+
267+
if (!callback && options instanceof Function) {
268+
callback = options;
269+
options = {};
270+
}
271+
272+
options.mock = true;
273+
274+
return quickPostMessageListen(name, options, callback);
220275
}
221276

222277
var POST_MESSAGE_HANDLERS = {};
@@ -373,6 +428,7 @@
373428
if (allowProxy(message)) {
374429
for (var i=0; i<proxies.length; i++) {
375430
if (event.source === proxies[i].from) {
431+
log('#proxy', proxies[i].from, 'to', proxies[i].to);
376432
return proxies[i].to.postMessage(event.data, '*');
377433
}
378434
}
@@ -382,7 +438,7 @@
382438
return;
383439
}
384440

385-
console.error('!! message', window.name, window.location.href, message.name, message);
441+
log('#receive', message.type, message.name, message);
386442

387443
POST_MESSAGE_HANDLERS[message.type](event, message);
388444
};
@@ -434,6 +490,8 @@
434490
on: quickPostMessageListen,
435491
once: quickPostMessageListenOnce,
436492

493+
mock: quickPostMessageListenMock,
494+
437495
sendToParent: function(name, data, callback) {
438496
return this.send(parent, name, data, callback);
439497
},

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "post-robot",
3-
"version": "1.0.1",
3+
"version": "1.0.2",
44
"description": "Simple postMessage based server.",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)