원래 주소: HTML5의 window.postMessage API
온라인 예시: HTML5의 window.postMessage 사용(로그를 보려면 콘솔을 열어주세요)
I window.postMessage를 캡슐화하기 위해 MooTools 플러그인 "PostMessager"를 작성했습니다. 여기를 클릭하여 다운로드할 수 있습니다.
HTML5의 window.postMessage 인터페이스 API를 이해하는 사람은 많지 않습니다. window.postMessage를 사용하면 여러 창/프레임 간에 도메인 간 데이터 및 정보 전송이 가능합니다. 본질적으로 window.postMessage는 도메인 간 Ajax 요청 역할을 합니다. 물론 원격 서버가 협력할 필요는 없습니다. 다음으로 window.postMessage의 작동 원리와 FireFox, IE8, Opera, Safari, Chrome에서 사용하는 방법을 소개하겠습니다.
1. 메시지 전송 종료
전체 과정 첫 번째 단계는 '뉴스 매체'를 설정하는 것입니다. 이 메시지 소스를 통해 새로 열린 창(또는 iframe)에 창 수준 데이터(메시지)를 보낼 수 있습니다. 다음 예에서 새 창으로 메시지를 보내는 빈도는 6초마다 한 번씩이며, 대상 창에서 반환된 응답 정보를 처리하도록 이벤트 수신이 설정되어 있습니다.
함수 추적(메시지){
var infos = Array.prototype.slice.call(arguments,0).join(" ");
if("console" in window){
console.log(infos); } else {
alert(infos);
}
};
// 팝업 창 만들기
var domain = 'http://scriptandstyle.com'; var myPopup = window.open (domain '/windowPostMessageListener.html','myWindow')
//정기적으로 메시지 보내기
setInterval(function(){
var message = '지금 시간:' (new Date().getTime( ));
trace('데이터 소스. 전송된 메시지: ' message)
myPopup.postMessage(message,domain); //데이터 정보 전송 및 대상 URI 설정
},6*1000 );
function binEvent(target,noOnEventName,handler){
if(window.addEventListener){
target.addEventListener(noOnEventName,handler)
} else if(window .attachEvent){
// IE의 청취 설정 기능은 attachmentEvent
target.attachEvent("on" noOnEventName,handler)
} else {
target["on" noOnEventName]=handler ;
}
};
// 수신된 정보를 모니터링합니다.
bindEvent(window,'message',function(event) {
// 특정 도메인의 메시지만 수신합니다
if(event.origin !== 'http://scriptandstyle.com') return;
trace('수신된 응답 정보: ',event.data)
},false); 🎜>
원본 기사의 작성자는 이벤트를 바인딩하기 위해 window.addEventListener 메서드를 사용하지만 IE에서는 오류가 보고됩니다(IE는 window.attachEvent). 물론 이벤트를 래핑하는 함수를 만들 수도 있습니다. 또는 MooTools 또는 jQuery/dojo와 같은 이미 만들어진 클래스 라이브러리를 사용하여 달성할 수 있습니다.
위의 예에서 새 창이 정상적으로 열리면 창 개체 참조 myPopup을 통해 메시지를 보내고 일치해야 하는 URI(프로토콜, 호스트 이름, 포트 번호)를 지정할 수 있습니다(사용자가 자식 창에서 점프하는 경우). 창을 다른 페이지로 이동하면 메시지가 전송되지 않습니다.
마찬가지로 메시지를 수신하도록 이벤트 핸들러 함수도 바인딩했습니다. 다시 한번 말씀드리지만, 메시지 이벤트의 출처 속성을 확인하는 것이 중요합니다. 왜냐하면 모든 URI에서 보낸 메시지를 수신할 수 있기 때문입니다. 그래야 여러 프레임과 상호 작용할 때 혼란을 겪지 않을 것입니다. 원본을 확인한 후 이 메시지를 처리하는 방법은 특정 비즈니스 및 요구 사항에 따라 다릅니다.
iframe을 사용하는 경우 코드는 다음과 같습니다.
코드를 복사하세요. var iframe = document.getElementById('myIFrame').contentWindow;
// 루프에서 메시지를 보내는 방법도 사용할 수 있습니다. . .
setInterval(function(){
var message = '현재 시간: ' (new Date().getTime());
trace('데이터 소스.메시지 전송됨: ' message);
iframe.postMessage(message,domain); //데이터 정보 전송 및 대상 URI 설정
iframe 객체의 contentWindow 속성에 액세스할 수 있는지 확인하세요. —— iframe 객체뿐만이 아닙니다.
2. 메시지 수신 종료
전체 과정의 두 번째 단계는 대상 창을 준비하는 것입니다. 대상 창에서 해야 할 일은 메시지 이벤트를 수신하고 이벤트의 원본 메시지 소스를 확인하는 것뿐입니다. 다시 알림: 메시지 이벤트 핸들러는 모든 도메인 이름에서 전송된 메시지를 수락할 수 있으므로 원본을 확인하고 신뢰 목록의 메시지만 처리하는 것이 매우 중요합니다.
코드 복사