forked from 0x2620/oxjs
add Ox.Message for message passing between frame and parent
This commit is contained in:
parent
916a175849
commit
47efc7377a
3 changed files with 107 additions and 0 deletions
53
source/Ox.UI/js/Core/Message.js
Normal file
53
source/Ox.UI/js/Core/Message.js
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
Ox.Message = (function() {
|
||||
/*
|
||||
{
|
||||
oxid: if coming from an iframe
|
||||
event: string
|
||||
data: object
|
||||
}
|
||||
|
||||
Ox.Message.post('play', {foo:'bar'});
|
||||
Ox.Message.post(iframe, {event: 'play', data: {foo:'bar'}});
|
||||
*/
|
||||
var that = {},
|
||||
callbacks = [];
|
||||
|
||||
window.addEventListener('message', function(e) {
|
||||
var data = {};
|
||||
try {
|
||||
data = JSON.parse(e.data);
|
||||
} catch(e) {}
|
||||
if (data.event == 'init') {
|
||||
window.oxid = data.data.id;
|
||||
} else if (data.event) {
|
||||
callbacks.forEach(function(callback) {
|
||||
callback(data.event, data.data, data.oxid);
|
||||
});
|
||||
} else {
|
||||
Ox.Log('Message', 'unknown message', e.data);
|
||||
}
|
||||
});
|
||||
|
||||
that.bind = function(callback) {
|
||||
callbacks.push(callback);
|
||||
}
|
||||
that.post = function(/* [target], event, data */) {
|
||||
var target, data, event;
|
||||
if (arguments.length == 2) {
|
||||
target = window.parent;
|
||||
event = arguments[0];
|
||||
data = arguments[1];
|
||||
} else {
|
||||
target = Ox.isElement(arguments[0][0]) ? arguments[0][0] : $('#' + arguments[0])[0];
|
||||
target = target.contentWindow;
|
||||
event = arguments[1];
|
||||
data = arguments[2];
|
||||
}
|
||||
target.postMessage(JSON.stringify({
|
||||
event: event,
|
||||
data: data,
|
||||
oxid: window.oxid
|
||||
}), '*');
|
||||
}
|
||||
return that;
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue