From 59901fd1c9a828cc19bba058e80855fd6205efce Mon Sep 17 00:00:00 2001 From: Frode Petterson Date: Tue, 5 Jan 2016 13:57:16 +0100 Subject: [PATCH] Fixed resizing script trying to access iframe content HFJ-1512 --- js/h5p-resizer.js | 20 +++++++++----------- js/h5p.js | 10 ++++++++-- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/js/h5p-resizer.js b/js/h5p-resizer.js index 228cc72..772cafd 100644 --- a/js/h5p-resizer.js +++ b/js/h5p-resizer.js @@ -19,7 +19,6 @@ actionHandlers.hello = function (iframe, data, respond) { // Make iframe responsive iframe.style.width = '100%'; - iframe.contentDocument.body.style.height = 'auto'; // Tell iframe that it needs to resize when our window resizes var resize = function (event) { @@ -47,7 +46,14 @@ * @param {Function} respond Send a response to the iframe */ actionHandlers.prepareResize = function (iframe, data, respond) { - respond('resizePrepared'); + // Do not resize unless page and scrolling differs + if (iframe.clientHeight !== data.scrollHeight || + data.scrollHeight !== data.clientHeight) { + + // Reset iframe height, in case content has shrinked. + iframe.style.height = data.clientHeight + 'px'; + respond('resizePrepared'); + } }; /** @@ -59,16 +65,8 @@ * @param {Function} respond Send a response to the iframe */ actionHandlers.resize = function (iframe, data, respond) { - if (iframe.clientHeight === iframe.contentDocument.body.scrollHeight && - iframe.contentDocument.body.scrollHeight === iframe.contentWindow.document.body.clientHeight) { - return; // Do not resize unless page and scrolling differs - } - - // Reset iframe height, in case content has shrinked. - iframe.style.height = iframe.contentWindow.document.body.clientHeight + 'px'; - // Resize iframe so all content is visible. Use scrollHeight to make sure we get everything - iframe.style.height = iframe.contentDocument.body.scrollHeight + 'px'; + iframe.style.height = data.scrollHeight + 'px'; }; /** diff --git a/js/h5p.js b/js/h5p.js index cd31b84..4a36aad 100644 --- a/js/h5p.js +++ b/js/h5p.js @@ -279,6 +279,9 @@ H5P.init = function (target) { // Initial setup/handshake is done parentIsFriendly = true; + // Make iframe responsive + document.body.style.height = 'auto'; + // Hide scrollbars for correct size document.body.style.overflow = 'hidden'; @@ -289,7 +292,7 @@ H5P.init = function (target) { // When resize has been prepared tell parent window to resize H5P.communicator.on('resizePrepared', function (data) { H5P.communicator.send('resize', { - height: document.body.scrollHeight + scrollHeight: document.body.scrollHeight }); }); @@ -307,7 +310,10 @@ H5P.init = function (target) { resizeDelay = setTimeout(function () { // Only resize if the iframe can be resized if (parentIsFriendly) { - H5P.communicator.send('prepareResize'); + H5P.communicator.send('prepareResize', { + scrollHeight: document.body.scrollHeight, + clientHeight: document.body.clientHeight + }); } else { H5P.communicator.send('hello');