UNPKG

chronosjs

Version:

JS Channels Mechanism

202 lines (188 loc) 6.88 kB
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Courier Tests</title> <script type="text/javascript" src="../../src/util/EventsUtil.js"></script> <script type="text/javascript" src="../../src/Events.js"></script> <script type="text/javascript" src="../../src/util/CommandsUtil.js"></script> <script type="text/javascript" src="../../src/Commands.js"></script> <script type="text/javascript" src="../../src/Reqres.js"></script> <script type="text/javascript" src="../../src/Channels.js"></script> <script type="text/javascript" src="../../node_modules/cacherjs/src/cacher.js"></script> <script type="text/javascript" src="../../node_modules/circuit-breakerjs/src/CircuitBreaker.js"></script> <script type="text/javascript" src="../../src/courier/PostMessageUtilities.js"></script> <script type="text/javascript" src="../../src/courier/PostMessagePromise.js"></script> <script type="text/javascript" src="../../src/courier/PostMessageMapper.js"></script> <script type="text/javascript" src="../../src/courier/PostMessageChannelPolyfill.js"></script> <script type="text/javascript" src="../../src/courier/PostMessageChannel.js"></script> <script type="text/javascript" src="../../src/courier/PostMessageCourier.js"></script> <script type="text/javascript"> var courier = new Chronos.PostMessageCourier(); ///// ---- BINDINGS ------ //// courier.bind({ appName: "host", eventName: "multiply", func: multiply }); courier.comply({ appName: "host", cmdName: "square", func: square }); courier.comply({ appName: "host", cmdName: "command", func: command }); courier.reply({ appName: "host", reqName: "divide", func: divide }); courier.bind({ appName: "host", eventName: "Ma Shlomha?", func: function(data) { courier.trigger({ appName: "iframe", eventName: "HAKOL TOV!", data: { text: (data && data.text || "") } }); } }); courier.comply({ appName: "host", cmdName: "Ma Shlomha?", func: function(data) { if (data && data.text) { return data.text; } } }); courier.reply({ appName: "host", reqName: "Ma Shlomha?", func: function(data) { return data && data.text; } }); courier.reply({ appName: "host", reqName: "Async Ma Shlomha?", func: function(data) { return new Chronos.PostMessagePromise(function(resolve, reject) { setTimeout(function() { resolve(data && data.text); }, 1000); }); } }); courier.reply({ appName: "host", reqName: "Ask Async Ma Shlomha?", func: function(data) { return new Chronos.PostMessagePromise(function(resolve, reject) { courier.request({ appName: "iframe", reqName: "Ma Shlomha?", data: data }, function(err, data) { resolve(data && data.text); }); }); } }); courier.reply({ appName: "host", reqName: "Redirect", func: function(data, callback) { setTimeout(function() { callback(null, "Going to Redirect..."); setTimeout(function() { redirect(); }, 100); }, 0); } }); ///// ---- TRIGGERS ------ //// function multiply(data) { courier.trigger({ appName: "frame", eventName: "got_it", data: data * 2 }); } function square(data) { if (data && data.num) { data.num *= data.num; courier.command({ appName: "frame", cmdName: "expect", data: data }); } else if (data[0]) { data[0] *= data[0]; courier.command({ appName: "frame", cmdName: "expect", data: data }); } else if (data && data.error) { throw new Error("Expected error to be thrown"); } } function divide(data, callback) { if (data && data.num) { data.num = 1; courier.request({ appName: "frame", reqName: "askBack", data: data }, callback); } } function command(data, callback) { if (true === data.success) { callback(); } else { throw new Error("Error in command"); } } function redirect() { var page = document.location.pathname.split("/").pop(); var lpHost = getQueryVariable('lpHost'); var bust = getQueryVariable('bust'); var polyfill = getQueryVariable('lpPMCPolyfill'); if (bust) { bust = (new Date()).getTime(); } var redirect = page + ((bust || lpHost || polyfill) ? "?" : "") + (bust ? "bust=" + bust : "") + (lpHost ? (bust ? "&" : "") + "lpHost=" + lpHost : "") + (polyfill ? (bust || lpHost ? "&" : "") + "lpPMCPolyfill=" + polyfill : ""); document.location.href = redirect; } function getQueryVariable(variable) { var query = window.location.search.substring(1); var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); if (decodeURIComponent(pair[0]) === variable) { return decodeURIComponent(pair[1]); } } console.log('Query variable ' + variable + ' not found'); } if ("true" === Chronos.PostMessageUtilities.getURLParameter("syncTrigger")) { courier.trigger({ appName: "frame", eventName: "loaded" }); } </script> </head> <body> </body> </html>