Skip to content

Commit 1baa317

Browse files
author
Fil Peyton
committed
Adjusting parameter on syncMessageResponseInit function to accept an actionName:dataFunctionReference pair object to allow for many postMessage action listeners.
1 parent efbcf2a commit 1baa317

File tree

3 files changed

+40
-15
lines changed

3 files changed

+40
-15
lines changed

SyncMessage.js

+6-7
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,18 @@ var SyncMessage = function(){
4545
}
4646
}
4747

48-
_SyncMessage.syncMessageResponseInit = function(responseWindow, responseOrigin, requestWindow, returnCallback){
48+
_SyncMessage.syncMessageResponseInit = function(responseWindow, responseOrigin, requestWindow, actions){
4949
_SyncMessage.responseWindow = responseWindow;
5050
_SyncMessage.responseOrigin = responseOrigin;
5151
_SyncMessage.requestWindow = requestWindow;
5252

5353
// Retrieve, then send
5454
$(_SyncMessage.responseWindow).on('message onmessage', function(){
55-
if(event.data.action.indexOf(_SyncMessage.actionKeyword) > -1){
56-
// Allow object of actionName:dataFunctionReference
57-
// Amend check in message handler to loop through object and
58-
// match action vs object of actions
59-
60-
event.data.data.returnObject = returnCallback();
55+
var actionName = event.data.action.split('_')[1];
56+
if(event.data.action.indexOf(_SyncMessage.actionKeyword) > -1 &&
57+
actions.hasOwnProperty(actionName)){
58+
59+
event.data.data.returnObject = actions[actionName]();
6160

6261
_SyncMessage.requestWindow.postMessage(event.data, _SyncMessage.responseOrigin);
6362
}

example/pageA.html

+20-5
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,27 @@
55
<script type="text/javascript" src="../SyncMessage.js"></script>
66
<script type="text/javascript">
77
$(function(){
8-
$('#sendMessage').on('click', function(){
9-
var syncMessage = new SyncMessage();
10-
var syncMessageRequestObject = syncMessage.syncMessageRequestInit($('#responderWindowIframe')[0].contentWindow, '*', window);
8+
var syncMessage = new SyncMessage();
9+
var syncMessageRequestObject = syncMessage.syncMessageRequestInit($('#responderWindowIframe')[0].contentWindow, '*', window);
1110

11+
$('#getItems').on('click', function(){
1212
// Send postMessage to Window B
1313
var syncMessageRequest = syncMessageRequestObject.postMessageRequest({
14-
action: 'yourAction',
14+
action: 'getItems',
15+
data: {}
16+
});
17+
18+
// Do something on resolution of syncMessageRequest
19+
syncMessageRequest.done(function(data){
20+
console.log(data);
21+
$('#messageOutput').html(JSON.stringify(data, null, 4));
22+
});
23+
});
24+
25+
$('#getName').on('click', function(){
26+
// Send postMessage to Window B
27+
var syncMessageRequest = syncMessageRequestObject.postMessageRequest({
28+
action: 'getName',
1529
data: {}
1630
});
1731

@@ -32,7 +46,8 @@
3246
<body>
3347
<h3>Page A</h3>
3448
<pre id="messageOutput"></pre>
35-
<button id="sendMessage">Get Items</button>
49+
<button id="getItems">Get Items</button>
50+
<button id="getName">Get Name</button>
3651

3752
<h3>Page B embedded in Iframe</h3>
3853
<iframe id="responderWindowIframe" src="pageB.html" width="500" height="500"></iframe>

example/pageB.html

+14-3
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,22 @@
66
<script type="text/javascript">
77
$(function(){
88
var items = 5;
9-
$('#messageOutput').html('Number of Items: ' + items);
9+
var name = 'Foo';
10+
$('#messageOutput').html('Name: ' + name + '<br/>' +
11+
'Number of Items: ' + items);
1012

11-
var syncMessage = new SyncMessage();
12-
syncMessage.syncMessageResponseInit(window, '*', window.parent, function(){
13+
function getItems(){
1314
return items;
15+
}
16+
17+
function getName(){
18+
return name;
19+
}
20+
21+
var syncMessage = new SyncMessage();
22+
syncMessage.syncMessageResponseInit(window, '*', window.parent, {
23+
'getItems': getItems,
24+
'getName': getName,
1425
});
1526

1627
});

0 commit comments

Comments
 (0)