포스트

웹 브라우저 탭 동일 사이트의 중단된 탭 깨우기 방법

문제 설명

사용자가 여러 웹 브라우저 탭을 열어 놓았을 때, 하나의 탭이 동작을 멈추거나 ‘중단(suspended)’ 상태가 되는 경우가 있다. 이 때, 하나의 탭에서 다른 탭을 깨우는 방법이 필요하다. 오늘의 주제는 동일한 웹사이트에서 실행되는 다른 탭을 어떻게 깨울 수 있는지에 대한 방법을 소개하겠습니다.

JavaScript의 Window 객체와 postMessage 메소드

웹 브라우저에서 탭 간의 통신을 가능하게 하는 가장 기본적인 도구는 JavaScript의 Window 객체입니다. Window 객체의 postMessage 메소드를 사용하면 서로 다른 탭 간에 데이터를 전송할 수 있습니다. postMessage는 웹 브라우저에서 제공하는 API로, 보안성이 높고 브라우저 간 호환성이 좋습니다.

1
2
3
4
5
6
7
8
9
// 보내는 탭
window.opener.postMessage('wakeUp', '*');

// 받는 탭
window.addEventListener('message', function(event) {
  if (event.data === 'wakeUp') {
    // 중단된 상태를 깨우는 코드
  }
});

BroadcastChannel API

BroadcastChannel API는 여러 탭이나 창에서 메시지를 송수신할 수 있는 좀 더 발전된 방법입니다. 이 API를 사용하면 동일한 출처(origin) 내에서 메시지를 쉽게 전달할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
// 채널 생성
const channel = new BroadcastChannel('my_channel');

// 메시지 전송
channel.postMessage('wakeUp');

// 메시지 수신
channel.onmessage = function(event) {
  if (event.data === 'wakeUp') {
    // 중단된 상태를 깨우는 코드
  }
};

localStorage와 이벤트 리스너

마지막으로, localStorage를 사용하는 방법도 있습니다. localStorage의 값을 변경하면 storage 이벤트가 발생하고, 이를 통해 다른 탭을 깨울 수 있습니다.

1
2
3
4
5
6
7
8
9
// 값 설정
localStorage.setItem('wakeUp', 'true');

// 이벤트 리스너 추가
window.addEventListener('storage', function(event) {
  if (event.key === 'wakeUp' && event.newValue === 'true') {
    // 중단된 상태를 깨우는 코드
  }
});

정리

웹 브라우저의 다른 탭을 깨우기 위한 방법은 여러 가지가 있습니다. postMessage, BroadcastChannel, 그리고 localStorage 등을 활용하여 상호작용을 구현할 수 있습니다. 여러 방법을 적절히 조합하여 사용하면 더 효과적인 결과를 얻을 수 있습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.