diff --git a/src/nativeAssetManager.js b/src/nativeAssetManager.js index 2eb9b85..e242164 100644 --- a/src/nativeAssetManager.js +++ b/src/nativeAssetManager.js @@ -430,7 +430,7 @@ export function newNativeAssetManager(win, nativeTag, mkMessenger = prebidMessen stopListening(); const resize = () => requestHeightResize( bid.adId, - (document.body.clientHeight || document.body.offsetHeight), + (document.body.clientHeight || document.body.offsetHeight || document.documentElement.scrollHeight), document.body.clientWidth > 1 ? document.body.clientWidth : undefined ); document.readyState === 'complete' ? resize() : window.onload = resize; diff --git a/test/spec/nativeAssetManager_spec.js b/test/spec/nativeAssetManager_spec.js index 2e7a718..51aaeec 100644 --- a/test/spec/nativeAssetManager_spec.js +++ b/test/spec/nativeAssetManager_spec.js @@ -620,14 +620,26 @@ describe('nativeAssetManager', () => { expect(win.document.body.innerHTML).to.include(`new value`); }); + function getResizeRequest() { + return win.parent.postMessage.args + .map(([msg]) => JSON.parse(msg)) + .find((msg) => msg.action === 'resizeNativeHeight') + } + it('should not request width resize if width is 1', () => { sandbox.stub(document.body, 'clientWidth').get(() => 1); const nativeAssetManager = makeManager(); nativeAssetManager.loadAssets(AD_ID); - const resizeRequest = win.parent.postMessage.args - .map(([msg]) => JSON.parse(msg)) - .find((msg) => msg.action === 'resizeNativeHeight') - expect(resizeRequest.width).to.not.exist; + expect(getResizeRequest().width).to.not.exist; + }); + + it('should use scrollHeight if offsetHeight & clientHeight are 0', () => { + sandbox.stub(document.body, 'clientHeight').get(() => 0); + sandbox.stub(document.body, 'offsetHeight').get(() => 0); + sandbox.stub(document.documentElement, 'scrollHeight').get(() => 123); + const nativeAssetManager = makeManager(); + nativeAssetManager.loadAssets(AD_ID); + expect(getResizeRequest().height).to.eql(123); }) it('should set the iframe to the width of the container', () => {