Front-end/Trouble Shooting

[iframe] 새로고침 시 스크롤이 이상하게 튀는 문제, 진짜 원인은 iframe이었다

PolarJin 2025. 5. 20. 02:27

✅ 문제 상황

Next.js로 메인 페이지를 개발 중이었고,
페이지 구조는 대략 이렇게 구성돼 있었다:

  • TopCarousel
  • 브랜드 소개 영역
  • 찾아오시는 길 (여기 안에 iframe으로 지도 삽입)

문제는 여기서 발생했다.

🔥 페이지를 새로고침하면,
👉 스크롤이 TopCarousel을 건너뛰고 갑자기 아래쪽 섹션으로 쭉 내려가버리는 현상이 발생!

처음엔 Swiper 캐러셀이 원인인가 싶어서 화살표부터 클릭 이벤트까지 다 확인했지만…
범인은 iframe이었다.

 

✅ 원인 분석

<iframe
  src="https://kko.to/VWh_80o8SJ"
  ...
/>

이런 식으로 iframe을 삽입했을 때 브라우저는 다음과 같이 반응:

  • 페이지 렌더링 시 iframe이 DOM에 나타나면
  • 브라우저가 iframe에 자동으로 포커스를 주는 경우가 있음
  • 그러면 scrollIntoView() 효과가 자동 발생하면서
  • 스크롤이 iframe 위치까지 튀는 것처럼 보이게 됨

✅ 해결 방법 (이거만 기억하면 된다!)

iframe이 스크롤에 영향을 주지 않게 하려면 아래 속성을 꼭 추가:

<iframe
  src="..."
  width="100%"
  height="450"
  style={{ border: 0, borderRadius: "12px" }}
  allowFullScreen
  loading="lazy"
  tabIndex={-1}       // ✅ 포커스 차단 핵심!
  sandbox=""          // ✅ iframe의 외부 스크립트/포커스 제한 (선택)
></iframe>

✅ 정리

설정 설명
tabIndex={-1} 브라우저가 iframe에 자동 포커스하지 않음
sandbox="" iframe 내부의 script, focus 권한 제한
scrolling="no" iframe 내부 스크롤도 방지 (옛날 브라우저 대응용)

✅ 왜 scrolling="no"가 안 먹히는가?

  • scrolling="no"는 구식 속성 (HTML4/XHTML 시절 유산)
  • modern 브라우저는 iframe의 스크롤 여부를 CSS의 overflow 스타일로 제어함
  • Next.js나 React처럼 strict DOM 렌더링 환경에서는 scrolling 속성은 경고만 날리고 무시

💡 결론

iframe이 문제의 원인일 거라고는 진짜 상상도 못했는데,
페이지 스크롤이 이상하게 튄다면 iframe을 가장 먼저 의심하자.

참고로 나는 api를 쓸거라 결국 이 부분을 주석처리했다.