티스토리 뷰
Browsing Context
- 브라우저가 Document를 표시하는 환경이다. 모던 브라우저에서 이는 보통 tab 단위이지만 window나 iframe, frame이 될 수도 있다.
- 각 브라우징 컨텍스트는 특정한 오리진, active document의 오리진, 여태까지 전시한 도큐먼트를 기억하는 히스토리를 차례대로 저장하고 있다.
- 브라우징 컨텍스트 간의 소통은 매우 제한적이지만, 같은 오리진을 가진 브라우징 컨텍스트 사이에서는
BroadcastChannel
을 오픈해서 사용할 수 있다.
BroadcastChannel
같은 오리진의 브라우징 컨텍스트끼리 소통할 수 있는 방법이다.
채널을 오픈한 다음 메세지를 보내면, 해당 채널을 구독하는 컨텍스트에서 메세지를 받아볼 수 있다.
아래처럼 채널을 생성할 수 있다. 만약 처음이면 생성되고, 이미 생성된 채널이면 구독하게 된다.
const bc = new BroadcastChannel('test'); // 채널 이름을 파라미터로 받는다.
메세지를 보낼 때는 postMessage라는 메서드를 사용한다. 메세지의 형식은 정해져 있지 않고 structed clone algorithm을 사용해서 시리얼라이즈되므로 웬만한 데이터 타입은 다 쓸 수 있다.
메세지가 포스팅되면 브로드캐스트 채널로 메세지 이벤트가 실행된다. 메세지 이벤트가 발생했을 때 실행할 콜백은 아래처럼 달아두면 된다.
bc.postMessage('post'); bc.onmessage = event => { console.log(event) }
단, 자신이 포스팅한 메세지는 자신이 받아볼 수 없다. 즉 포스팅을 한 페이지한테는 message이벤트가 실행되지 않는다.
Channel Messaging API와 다른 점은 기본적으로 broadcastchannel은 one-to-many를 위한 것이고 messagechannel는 one-to-one을 위한 것이라는 점이다.
window.postMessage
와의 차이점은, broadcastchannel은 same origin만 지원하지만window.postMessage
는 그렇지 않다는 점이다. 그리고window.postMessage
는 타켓 윈도우의 참조도 알고 있어야 하는 반면 broadcastchannel은 채널 이름으로 구독하고 양방향 소통이 가능해서 사용이 훨씬 쉽다.
Ref
'공부일지(TIL) > JavaScript' 카테고리의 다른 글
[JavaScript] transpiler vs polyfills (0) | 2022.08.17 |
---|---|
CommonJS vs ES module (0) | 2022.07.24 |
[JavaScript] 렉시컬 환경 (0) | 2021.08.11 |
[JavaScript] Iterable, Array-like (0) | 2021.08.01 |
[JavaScript] Value Equality (0) | 2021.07.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- package.json
- Prefix Sums
- react
- 인스턴스
- 자바
- til
- youtube data api
- jQuery
- 리덕스
- Redux
- linkedlist
- Data Structure
- SQL
- c언어
- getter
- 알고리즘
- rxjs
- GIT
- Conflict
- CSS
- JavaScript
- 깃
- 개발 공부
- oracle
- useEffect
- 제네릭스
- Java
- this
- 포인터 변수
- Session
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함