본문 바로가기
Frontend/javascript

[iframe 사용법 및 속성값 가이드] MDN 문서를 기반으로 작성한 가이드 문서

by Lizzie Oh 2024. 11. 19.
 

iframe 태그: 인라인 프레임 요소에 대한 가이드

HTML의 <iframe> 요소는 현재 문서 내에 다른 HTML 페이지를 중첩하여 임베딩할 수 있도록 하는 강력한 도구입니다. 이 가이드는 iframe 사용법을 단계별로 설명하며, 각 속성과 기능을 상세히 다룹니다.


1. iframe의 기본 개념

iframe은 중첩된 브라우징 컨텍스트(browsing context)를 제공하여 별도의 HTML 페이지를 현재 페이지 안에 임베딩합니다. 각 iframe은 독립적인 문서 환경을 가지며, 자체 URL 내비게이션을 지원합니다.

  • 최상위 브라우징 컨텍스트: 부모가 없는 브라우징 컨텍스트(일반적으로 브라우저 창).
  • 부모 브라우징 컨텍스트: iframe을 포함하고 있는 브라우징 컨텍스트.

⚠️ 주의: iframe은 추가적인 메모리와 컴퓨팅 리소스를 소비합니다. 따라서 성능 문제가 발생하지 않도록 사용을 신중히 계획해야 합니다.


2. iframe의 속성

iframe의 다양한 속성을 이해하고 올바르게 사용하는 것은 성공적인 구현의 핵심입니다.

2.1 글로벌 속성

iframe은 HTML의 글로벌 속성을 지원하며, 모든 표준적인 HTML 속성을 사용할 수 있습니다.

2.2 주요 속성

allow

Permissions Policy를 지정하여 iframe에서 사용할 수 있는 기능을 제한하거나 허용합니다. 예: 카메라, 마이크, 배터리 정보 접근 등.

html
코드 복사
<iframe src="example.html" allow="camera; microphone"></iframe>

🔍 참고: allow 속성은 HTTP 헤더로 설정된 Permissions Policy보다 더 강력한 제한을 추가할 수 있습니다.


allowfullscreen

iframe이 requestFullscreen() 메서드를 호출하여 전체 화면 모드를 활성화할 수 있도록 허용합니다.

html
코드 복사
<iframe src="video.html" allowfullscreen></iframe>

참고: 더 이상 권장되지 않는 속성이며 allow="fullscreen"으로 대체됩니다.


src

임베딩할 HTML 페이지의 URL을 지정합니다. 기본값은 about:blank입니다.

html
코드 복사
<iframe src="https://example.com"></iframe>

srcdoc

임베딩할 HTML 문서를 인라인으로 작성할 수 있습니다. 이 속성은 src 속성을 덮어씁니다.

html
코드 복사
<iframe srcdoc="<p>Hello, world!</p>"></iframe>

sandbox

임베딩된 콘텐츠의 행동을 제한합니다. 값은 공백으로 구분된 토큰으로 구성됩니다.

html
코드 복사
<iframe src="example.html" sandbox="allow-scripts allow-same-origin"></iframe>
토큰설명
allow-scripts 스크립트 실행 허용 (팝업은 허용되지 않음).
allow-same-origin 동일 출처로 간주.
allow-modals alert(), prompt() 같은 모달 허용.
allow-popups 새 창 열기 허용.

주의: allow-scripts와 allow-same-origin을 함께 사용할 경우 보안에 취약해질 수 있습니다.


height, width

iframe의 크기를 지정합니다. 기본값은 height="150", width="300"입니다.

html
코드 복사
<iframe src="example.html" height="500" width="800"></iframe>

loading

iframe 로딩 방식을 지정합니다.

  • eager: 페이지 로드 시 즉시 iframe 로드 (기본값).
  • lazy: 사용자가 보게 될 때까지 iframe 로드를 지연.
html
코드 복사
<iframe src="example.html" loading="lazy"></iframe>

: lazy 로딩은 초기 페이지 로드 속도를 개선하는 데 유용합니다.


2.3 기타 속성

속성설명
name iframe을 타겟으로 지정할 이름.
referrerpolicy referrer 정보를 제어.
csp (실험적) 콘텐츠 보안 정책을 설정.
credentialless (실험적) 자격 증명을 제외하여 임베딩된 문서의 보안을 강화.

3. iframe의 접근성과 보안

3.1 접근성

스크린 리더를 사용하는 사용자를 위해 title 속성을 활용하여 iframe의 콘텐츠를 설명합니다.

html
코드 복사
<iframe title="위키피디아 아보카도 페이지" src="https://en.wikipedia.org/wiki/Avocado"></iframe>

3.2 보안

iframe은 잠재적인 보안 위험을 동반하므로 다음을 고려하세요:

  • sandbox 사용: iframe 내부 콘텐츠의 행동을 제한.
  • 별도의 출처(origin): 민감한 데이터를 iframe에서 안전하게 보호.

4. 자바스크립트를 통한 제어

iframe의 DOM에 접근하려면 다음 속성을 사용합니다:

  • contentWindow: iframe의 window 객체.
  • contentDocument: iframe의 document 객체.
javascript
코드 복사
const iframe = document.querySelector('iframe'); const iframeDoc = iframe.contentDocument; const iframeWin = iframe.contentWindow;

주의: 동일 출처 정책(Same-Origin Policy)으로 인해 다른 출처의 iframe에는 접근할 수 없습니다. 이 경우 postMessage()를 사용하여 통신합니다.


5. iframe 사용 시 유의점

  1. 성능 최적화:
    • 필요하지 않은 경우 iframe 사용을 최소화.
    • loading="lazy" 활용.
  2. 보안 고려:
    • 항상 sandbox 속성 사용.
    • iframe 콘텐츠가 신뢰할 수 있는 출처인지 확인.
  3. SEO:
    • iframe 내부 콘텐츠는 검색 엔진이 인덱싱하지 않을 수 있음.

iframe은 강력하지만 올바르게 사용하지 않으면 성능 및 보안 문제가 발생할 수 있습니다. 위 가이드를 활용하여 iframe을 효과적으로 활용해 보세요!

반응형

댓글