아이프레임 자동높이

아이프레임 자동높이

QA

아이프레임 자동높이

본문

부모파일


<iframe src="01.html" id="myiframe" scrolling="no" width="300"></iframe>
<script type="text/javascript">
  let iframe = document.getElementById('myiframe');
  
  window.addEventListener('message', function(e) {
    let message = e.data;
    iframe.style.height = message.height + "px";
  } , false);
</script>
 

 

자식파일 (01.html)


<script type="text/javascript">
window.addEventListener('load', function() {
  let message = {height: document.body.scrollHeight};    
  window.top.postMessage(message, "*");
});
</script>
 
<div style="height:500px; background:#ccc;">
<a href="02.html">이동</a>
</div>
 

 

자식파일 (02.html)


<script type="text/javascript">
window.addEventListener('load', function() {
  let message = {height: document.body.scrollHeight};    
  window.top.postMessage(message, "*");
});
</script>
 
<div style="height:1500px; background:#555;">
<a href="01.html">이동</a>
</div>
 

 

처음 자동높이는 잘됩니다.

다만 아이프레임 내에서 이동시 높이가 높은 파일로 이동하면 이상이 없는데,

낮은 파일로 이동하면, 높이가 맞춰지지 않습니다.

 

문제가 뭘까요...??;

이 질문에 댓글 쓰기 :

답변 1

다음과 같은 방법으로 시도해 볼 수 있을것 같습니다.


<!-- 부모 파일 -->
<iframe src="01.html" id="myiframe" scrolling="no" width="300"></iframe>
<script type="text/javascript">
  let iframe = document.getElementById('myiframe');
  
  window.addEventListener('message', function(e) {
    let message = e.data;
    iframe.style.height = message.height + "px";
  } , false);
</script>
<!-- 자식 파일 (01.html) -->
<script type="text/javascript">
window.addEventListener('load', function() {
  let message = {height: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)};    
  window.top.postMessage(message, "*");
});
</script>
<div style="height:500px; background:#ccc;">
  <a href="02.html">이동</a>
</div>
<!-- 자식 파일 (02.html) -->
<script type="text/javascript">
window.addEventListener('load', function() {
  let message = {height: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)};    
  window.top.postMessage(message, "*");
});
</script>
<div style="height:1500px; background:#555;">
  <a href="01.html">이동</a>
</div>

다음과 같이 해보시는건 어떨까 합니다.


<!-- 부모 파일 -->
<iframe src="01.html" id="myiframe" scrolling="no" width="300"></iframe>
<script type="text/javascript">
  let iframe = document.getElementById('myiframe');
  
  window.addEventListener('message', function(e) {
    let message = e.data;
    iframe.style.height = message.height + "px";
  } , false);
</script>

<!-- 자식 파일 (01.html) -->
<script type="text/javascript">
window.addEventListener('load', function() {
  // 함수를 정의하여 높이를 측정하고 전송
  function postHeight() {
    let message = { height: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) };
    window.top.postMessage(message, "*");
  }

  // 페이지 로드시 초기 높이 전송
  postHeight();

  // a 태그 클릭 시 높이 재측정 및 전송
  document.querySelector('a').addEventListener('click', function(e) {
    e.preventDefault(); // 기본 이벤트 처리 방지
    // 페이지 이동 전에 높이를 다시 측정하고 전송
    postHeight();
    // 페이지 이동
    window.location.href = this.getAttribute('href');
  });
});
</script>

<div style="height:500px; background:#ccc;">
  <a href="02.html">이동</a>
</div>

<!-- 자식 파일 (02.html) -->
<script type="text/javascript">
window.addEventListener('load', function() {
  // 함수를 정의하여 높이를 측정하고 전송
  function postHeight() {
    let message = { height: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) };
    window.top.postMessage(message, "*");
  }

  // 페이지 로드시 초기 높이 전송
  postHeight();

  // a 태그 클릭 시 높이 재측정 및 전송
  document.querySelector('a').addEventListener('click', function(e) {
    e.preventDefault(); // 기본 이벤트 처리 방지
    // 페이지 이동 전에 높이를 다시 측정하고 전송
    postHeight();
    // 페이지 이동
    window.location.href = this.getAttribute('href');
  });
});
</script>

<div style="height:1500px; background:#555;">
  <a href="01.html">이동</a>
</div>

답변을 작성하시기 전에 로그인 해주세요.
전체 92
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT