Home > Web Front-end > JS Tutorial > How Can I Dynamically Resize an Iframe Based on its Content Height Across Domains?

How Can I Dynamically Resize an Iframe Based on its Content Height Across Domains?

DDD
Release: 2024-12-10 10:45:10
Original
789 people have browsed it

How Can I Dynamically Resize an Iframe Based on its Content Height Across Domains?

Resizing an Iframe Based on Content Height

When working with iframes to display content from other domains, adjusting their height to fit the contents can be a challenge due to the same-origin policy. This policy restricts JavaScript communication between pages on different domains.

Solution:

To overcome this limitation, a multi-step approach is required that involves both the iframe content and the framing page.

1. Cross-Domain Communication:

Since the iframe content and the framing page are on different domains, direct communication is not possible. However, a "pipe" mechanism can be established using another iframe.

2. Height Calculation and Message Passing:

When the iframe content loads, it calculates its height and sets the source of a hidden iframe on the framing page to a helper page on the same domain, passing the calculated height as an argument in the URL.

3. Helper Page and Parent Frame Resize:

The helper page on the same domain receives the height from the iframe content and communicates it to the parent frame, which can then resize the iframe accordingly.

Code:

Framing Page:

<script type="text/javascript">
  function resizeIframe(height) {
    document.getElementById('myIframe').height = height + 60;
  }
</script>
<iframe>
Copy after login

Iframe Content:

<script type="text/javascript">
  function setIframeHeight() {
    var height = document.body.scrollHeight;
    document.getElementById('iframeResizer').src = 'helper.com?height=' + height;
  }
</script>
<iframe>
Copy after login

Helper Page:

<script type="text/javascript">
  function resizeParentIframe() {
    var height = getParam('height');
    parent.parent.resizeIframe(height);
  }
  function getParam(name) {
    var regex = new RegExp("[\?&]" + name + "=([^&amp;#]*)");
    var results = regex.exec(window.location.href);
    return results ? results[1] : "";
  }
</script>
Copy after login

Note:

This solution assumes that the same-origin policy allows JavaScript communication between the iframe content and the helper page. If this is not the case, additional measures may be required.

The above is the detailed content of How Can I Dynamically Resize an Iframe Based on its Content Height Across Domains?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template