TinyMCE React integration 에서 TinyMCE는 iframe으로 제공되는 것을 확인했다.
그래서 이번에 iframe이 어떤 장단점이 있는지 왜 사용하는지에 대해 알아보자.
네이버 블로그가 iframe을 사용하는 것을 확인했다.
네이버 만화의 경우 일반적으로 생각하는 웹페이지 이동방식으로 이동되고 있는 것을 확인할 수 있었고
페이지 이동 시 마다 URL이 바뀌면서 페이지가 이동하고 페이지가 바뀌면 브라우저가 초기화 되면서 개발자 도구의 network탭의 기록도 초기화되었다.
반면 iframe으로 페이지 전체를 구성한 네이버 블로그는 GET방식으로 페이지가 이동되는 것은 같지만 페이지 이동 시 새로고침 아이콘이 X모양으로 바뀌지 않았고
네트워크 기록도 초기화되지 않고 계속 쌓였다.
HTML5 이 출시 되기 전 flash나 frame, iframe 등을 이용해서 웹 브라우저에서 다양한 콘텐츠를 제공했던 것 같다.
하지만 HTML5에서 video 태그 등 다양한 태그들이 출시 되면서 iframe을 대체할 수 있는 것 같다.
여전히 iframe을 이용해서 콘텐츠를 쉽게 추가할 수 있는 것은 iframe을 사용하는 가장 큰 이유인 것 같다.
allow : iframe에 대한 기능 정책을 지정
allowfullscreen : boolean
name : 포함된 브라우징 컨텍스트의 타겟팅 가능한 이름입니다. 이것은 <a>
, <form>
또는 <base>
요소의 대상 속성에서 사용할 수 있습니다. <input>
또는 <button>
요소의 formtarget 속성; 또는 window.open() 메서드의 windowName 매개변수입니다.
sandbox : 프레임의 내용에 추가 제한을 적용합니다. 속성 값은 모든 제한을 적용하기 위해 비어 있거나 특정 제한을 해제하기 위해 공백으로 구분된 토큰일 수 있습니다.
src : The URL of the page to embed. Use a value of about:blank to embed an empty page that conforms to the same-origin policy. Also note that programatically removing an <iframe>
's src attribute (e.g. via Element.removeAttribute()) causes about:blank to be loaded in the frame in Firefox (from version 65), Chromium-based browsers, and Safari
width, height : 크기 지정 - default : 300px/150px
scrolling(HTML5에선 사용 안 함) : 브라우저가 프레임에 대한 스크롤 막대를 제공해야 하는 시기를 나타냅니다.
window.postMessage를 이용하면 iframe안의 페이지와 메시지를 주고 받을 수 있다.
window.postMessage( data, [ports], targetOrigin );
window.addEventListener( 'message', function( e ) {
// e.data가 전달받은 메시지
console.log( e.data );
} );