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

Commit 5a36e94

Browse files
author
Daniel Brain
committed
Bugfixes for prod errors
1 parent 28c3844 commit 5a36e94

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

index.js

+28-25
Original file line numberDiff line numberDiff line change
@@ -106,54 +106,57 @@
106106

107107
function postMessageRequest(options) {
108108

109-
if (!options.window) {
110-
throw new Error('Expected options.window');
111-
}
112-
113109
if (!options.name) {
114110
throw new Error('Expected options.name');
115111
}
116112

113+
var promise;
114+
115+
if (!options.callback) {
116+
if (window.Promise) {
117+
promise = new window.Promise(function (resolve, reject) {
118+
options.callback = function (err, result) {
119+
return err ? reject(err) : resolve(result);
120+
};
121+
});
122+
} else {
123+
throw new Error('Expected callback or window.Promise');
124+
}
125+
}
126+
127+
options.respond = once(function(err, response) {
128+
options.callback(err, response);
129+
return promise;
130+
});
131+
132+
if (!options.window) {
133+
return options.respond(new Error('Expected options.window'));
134+
}
135+
117136
if (mockMode) {
118137
options.window = window;
119138

120139
} else if (typeof options.window === 'string') {
121140
var el = document.getElementById(options.window);
122141

123142
if (!el) {
124-
throw new Error('Expected options.window ' + options.window + ' to be a valid element id');
143+
return options.respond(new Error('Expected options.window ' + options.window + ' to be a valid element id'));
125144
}
126145

127146
if (el.tagName.toLowerCase() !== 'iframe') {
128-
throw new Error('Expected options.window ' + options.window + ' to be an iframe');
147+
return options.respond(new Error('Expected options.window ' + options.window + ' to be an iframe'));
129148
}
130149

131150
options.window = el.contentWindow;
132-
}
133-
134-
options.callback = once(options.callback);
135151

136-
var promise;
137-
138-
if (!options.callback && window.Promise) {
139-
promise = new window.Promise(function(resolve, reject) {
140-
options.callback = function(err, result) {
141-
return err ? reject(err) : resolve(result);
142-
};
143-
});
152+
if (!options.window) {
153+
return options.respond(new Error('Expected options.window'));
154+
}
144155
}
145156

146157
var hash = options.name + '_' + Math.random().toString();
147158
responseHandlers[hash] = options;
148159

149-
options.respond = once(function(err, response) {
150-
return options.callback(err, response);
151-
});
152-
153-
if (!options.window.postMessage) {
154-
return options.respond(new Error('Target window does not have postMessage handler'));
155-
}
156-
157160
if (options.window.closed) {
158161
return options.respond(new Error('Target window is closed'));
159162
}

0 commit comments

Comments
 (0)