/**
*
* @param group {String} group identifier name
* @param [targetWindow=window.parent]
* @param [origin='*']
* @constructor
*/
Granite.author.MessageChannel(group, targetWindow, origin);
/**
* subscribe to a request message
*
* @param msg identifier
* @param callback
*/
Granite.author.MessageChannel.prototype.subscribeRequestMessage(msg, callback);
/**
* unsubscribe a request message
*
* @param msg identifier
* @param callback
*/
Granite.author.MessageChannel.prototype.unsubscribeRequestMessage(msg, callback);
/**
* this function will send a message to the content frame
*
* @param msg {String} message identifier
* @param data {Object} Plain JSON object with data to transfer
* @param timeout {Number} if the promise should time out,
* the default (= 0) is infinite
* a negative timeout will not expect any response
* @return {Promise} null if the timeout is negative
*/
Granite.author.MessageChannel.prototype.postMessage(msg, data, timeout);
/**
* Add configured functionality to another object
* @param obj target
*/
Granite.author.MessageChannel.prototype.mixin(obj);
/**
* subscribe to a request message
*
* @param msg identifier
* @param callback
*/
Granite.author.ContentFrame.subscribeRequestMessage(msg, callback);
/**
* unsubscribe a request message
*
* @param msg identifier
* @param callback
*/
Granite.author.ContentFrame.unsubscribeRequestMessage(msg, callback);
/**
* this function will send a message to the content frame
*
* @param msg {String} message identifier
* @param data {Object} Plain JSON object with data to transfer
* @param timeout {Number} if the promise should time out,
* the default (= 0) is infinite
* a negative timeout will not expect any response
* @return {Promise} null if the timeout is negative
*/
Granite.author.ContentFrame.postMessage(msg, data, timeout);
/**
* subscribe to a request message
*
* @param msg identifier
* @param callback
*/
Granite.author.EditorFrame.subscribeRequestMessage(msg, callback);
/**
* unsubscribe a request message
*
* @param msg identifier
* @param callback
*/
Granite.author.EditorFrame.unsubscribeRequestMessage(msg, callback);
/**
* this function will send a message to the content frame
*
* @param msg {String} message identifier
* @param data {Object} Plain JSON object with data to transfer
* @param timeout {Number} if the promise should time out,
* the default (= 0) is infinite
* a negative timeout will not expect any response
* @return {Promise} null if the timeout is negative
*/
Granite.author.EditorFrame.postMessage(msg, data, timeout);
Request callback and Response message
/**
* Function to directly respond to a request.
* The function call is attached to the request object
*
* @param msg {String} respond message
* @param [data]
* @param [error] {String} if error occurs
*/
request.respond(msg, data, error);
e.g.
var mc = new MessageChannel('my-group');
mc.subscribeRequestMessage('a-msg', function (request) {
request.respond('my-answer', { some: 'data' });
});
Promise resolution
Promise.then(function (result) {
console.log(result.req); // request
console.log(result.res); // response
});
Promise.catch(function (result) {
console.log(result.req); // request
console.log(result.res); // response - null if a timeout occured
console.log(result.error); // error message
});