| <!doctype html> |
| <title>Inner document for use in iframes.sub.html test</title> |
| <script> |
| function isInView(element) { |
| let rect = element.getBoundingClientRect(); |
| return rect.top >= 0 && rect.top <= window.innerHeight |
| && rect.left >= 0 && rect.left <= window.innerWidth; |
| } |
| |
| function postResult() { |
| let position = 'unknown'; |
| if (window.scrollY == 0) |
| position = 'top'; |
| else if (isInView(document.getElementById('target'))) |
| position = 'target'; |
| else if (isInView(document.getElementById('elementid'))) |
| position = 'elementid'; |
| |
| let results = { |
| scrollPosition: position, |
| href: window.location.href, |
| }; |
| |
| window.top.postMessage(results, "*"); |
| } |
| |
| window.addEventListener('message', (e) => { |
| if (e.data == 'getResult') { |
| // Use a timeout to get results - in the elementId fallback case, the |
| // browser may retry the text fragment search a few times before giving |
| // up and trying the elementid. |
| setTimeout(postResult, 2000); |
| } else if (e.data == 'reset') { |
| window.location.hash = ''; |
| window.scrollTo(0, 0); |
| window.top.postMessage('', "*"); |
| } |
| }); |
| </script> |
| <style> |
| p { |
| margin-top: 400vh; |
| margin-bottom: 400vh; |
| } |
| </style> |
| <body> |
| <p id="target">Target Text</p> |
| <div id="elementid">DIV</div> |
| </body> |