diff --git a/plugin/postmessage/iframe_example.html b/plugin/postmessage/iframe_example.html new file mode 100644 index 0000000000000000000000000000000000000000..6e5709d07f5cd88c399eeb863f85fbe4d470f375 --- /dev/null +++ b/plugin/postmessage/iframe_example.html @@ -0,0 +1,34 @@ +<html> +<body> + <iframe id="reveal" src="reveal.js/index.html" width="500" height="500"></iframe> +<div> +<input id="back" type="button" value="go back"/> +<input id="ahead" type="button" value="go ahead"/> +<input id="slideto" type="button" value="slideto 2-2"/> +</div> +<script> +(function (){ + var back = document.getElementById('back'), + ahead = document.getElementById('ahead'), + slideto = document.getElementById('slideto'), + reveal = window.frames[0]; + + back.addEventListener('click', function (){ + + reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*'); + },false); + + ahead.addEventListener('click', function (){ + reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*'); + },false); + + slideto.addEventListener('click', function (){ + + reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*'); + },false); + +}()); + +</script> +</body> +</html> diff --git a/plugin/postmessage/postmessage.js b/plugin/postmessage/postmessage.js new file mode 100644 index 0000000000000000000000000000000000000000..176d2306ecf7254fe0ce2ae81e4a178d56a6f9c2 --- /dev/null +++ b/plugin/postmessage/postmessage.js @@ -0,0 +1,40 @@ +/* +simple postmessage plugin + +Useful when a reveal slideshow is inside an iframe. +It allows to call reveal methods from outside. + +Example: + var reveal = window.frames[0]; + + // Reveal.prev(); + reveal.postMessage(JSON.stringify({method: 'prev', args: []}), '*'); + // Reveal.next(); + reveal.postMessage(JSON.stringify({method: 'next', args: []}), '*'); + // Reveal.slide(2, 2); + reveal.postMessage(JSON.stringify({method: 'slide', args: [2,2]}), '*'); + +Add to the slideshow: + + dependencies: [ + ... + { src: 'plugin/postmessage/postmessage.js', async: true, condition: function() { return !!document.body.classList; } } + ] + + +*/ + +(function (){ + +window.addEventListener("message", function (event){ + var data = JSON.parse(event.data), + method = data.method, + args = data.args; + if (Reveal[method]){ + Reveal[method].apply(Reveal, data.args); + } +}, false); +}()); + + +