창 사이에 데이터를 보내는 JavaScript
10924 단어 beginnersjavascriptwebdev
빌드하기가 약간 이상하게 들릴 수 있지만 생각보다 쉽습니다.
이 문서에서는 기본 페이지를 만듭니다. 클릭하면 새 팝업 창이 열립니다.
다른 버튼은 이 창에 정적 메시지를 보낼 수 있습니다.
이 팝업 창에서 사용자는 세 가지 옵션을 선택하고 선택한 옵션을 원본으로 다시 보낼 수 있습니다.
아래 비디오에서 이에 대한 데모를 볼 수 있습니다.
구조 설정
저는 이 프로젝트를 위해 매우 간단한 설정을 만들기로 결정했습니다.
새 폴더를 생성하여 시작하고 내부에
index.html
, sub.html
및 index.js
파일을 생성합니다.index.html
콘텐츠를 만드는 것으로 시작하겠습니다.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Sending messages</title>
</head>
<body>
<p>Welcome. You can click the button below to open a new tab</p>
<button onclick="openNewWindow()">Open new tab</button>
<button onclick="sendMessage()">Send message</button>
<p id="response"></p>
<script src="index.js"></script>
</body>
</html>
인덱스와 매우 유사한
sub.html
페이지로 이동하겠습니다.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Sending messages</title>
</head>
<body>
<p>I'm the sub page</p>
<p id="response"></p>
<p>Choose your response</p>
<button onclick="closeWindow(`That's amazing`)">That's amazing</button>
<button onclick="closeWindow(`Pretty cool`)">Pretty cool</button>
<button onclick="closeWindow(`Meh, could be cooler`)">
Meh, could be cooler
</button>
<script src="index.js"></script>
</body>
</html>
JavaScript를 사용하여 창 간에 메시지 보내기
이 특정 기사에서는 하나의 일반 JavaScript 파일을 사용하기로 결정했습니다. 그러나 두 개의 파일로 분할할 수도 있습니다.
index.js
파일을 열어봅시다.가장 먼저 추가하고 싶은 것은 실제로 창을 여는 것입니다.
let newWindow;
const openNewWindow = () => {
const params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=300,height=300`;
newWindow = window.open('sub.html', 'sub', params);
};
window.open
함수에 여러 매개변수를 전달합니다.sub.html
: 열려고 하는 페이지sub
: 열려는 페이지의 이름(아무거나 가능)params
: 이 새 창에 대한 옵션내가 이 새 창을 변수로 설정한 것을 발견했을 수도 있습니다. 우리는 이것을 다른 버튼으로 데이터를 보내는 것을 보았습니다.
이 새로운 팝업 창에 데이터를 보내려면
sendMessage
함수를 만들어야 합니다.const sendMessage = () => {
newWindow.postMessage({ foo: 'bar' }, '*');
};
이것은
foo: bar
값을 가진 개체를 포함하는 창에 새 메시지를 게시합니다.이제 수신 측에서 작업할 수 있습니다.
postMessage
함수를 사용했기 때문에 현재 창에 대한 메시지를 구독할 수 있습니다.그렇게 하려면 다음 수신기를 만듭니다.
const response = document.getElementById('response');
window.addEventListener('message', (event) => {
if (event.data?.foo) {
response.innerText = event.data.foo;
}
});
이 함수는 모든 메시지를 듣고
foo
개체와 함께 들어오는 경우 응답 텍스트를 해당 값으로 설정합니다.다음 부분은 원래 창으로 데이터를 다시 보내는 것입니다.
sub.html
함수를 호출하는 closeWindow
파일에 세 개의 버튼을 만들었습니다.계속해서 해당 기능을 추가해 보겠습니다.
const closeWindow = (message) => {
window.opener.postMessage({ msg: message }, '*');
window.close();
};
그리고 다시
postMessage
함수를 활용할 수 있지만 이번에는 원래 창을 참조하는 opener
에서 호출합니다.이제 이 특정 메시지를 처리하도록 이벤트 수신기도 수정하겠습니다.
window.addEventListener('message', (event) => {
if (event.data?.foo) {
response.innerText = event.data.foo;
}
if (event.data?.msg) {
response.innerText = event.data.msg;
}
});
짜잔, 이제 JavaScript에서 두 창 사이에 메시지를 보낼 수 있습니다.
소스 코드를 보고 싶으시면 GitHub에 업로드했습니다.
읽어주셔서 감사합니다. 연결합시다!
제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook에 연결하거나
Reference
이 문제에 관하여(창 사이에 데이터를 보내는 JavaScript), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dailydevtips1/javascript-sending-data-between-windows-1ima텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)