[javascript] 도메인간에 window.postMessage를 어떻게 사용합니까?
window.postMessage 의 요점은 다른 도메인에서 호스팅되는 창 / 프레임 간의 안전한 통신을 허용 하는 것 같지만 실제로 Chrome 에서는 허용 하지 않는 것 같습니다 .
시나리오는 다음과 같습니다.
- 도메인 A의 페이지에 <iframe> (
src
도메인 B * 사용 ) 삽입 - <iframe>은 대부분 <script> 태그로 끝나며 실행이 끝날 때 …
- window.postMessage ( some_data , page_on_A )를 호출합니다.
<iframe>은 가장 확실하게 도메인 B의 컨텍스트에 있으며 해당 <iframe>에 포함 된 자바 스크립트가 제대로 실행되고 postMessage
올바른 값으로 호출되는지 확인했습니다 .
Chrome에서이 오류 메시지가 나타납니다.
A 에게 메시지를 게시 할 수 없습니다 . 수신자는 출처 B가 있습니다.
다음은 A 페이지에 메시지 이벤트 리스너를 등록하는 코드입니다.
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
나는 또한 호출을 시도했지만 window.postMessage(some_data, '*')
오류를 억제하는 것뿐입니다.
여기서 요점을 놓치고 있습니까? window.postMessage (…)가 이것을 의미하지 않습니까? 아니면 내가 끔찍하게 잘못하고 있습니까?
* Mime 형식의 텍스트 / html, 그대로 유지해야합니다.
답변
다음은 Chrome 5.0.375.125에서 작동하는 예입니다.
페이지 B (iframe 콘텐츠) :
<html>
<head></head>
<body>
<script>
top.postMessage('hello', 'A');
</script>
</body>
</html>
사용주의 top.postMessage
나 parent.postMessage
하지 window.postMessage
여기를
페이지 A :
<html>
<head></head>
<body>
<iframe src="B"></iframe>
<script>
window.addEventListener( "message",
function (e) {
if(e.origin !== 'B'){ return; }
alert(e.data);
},
false);
</script>
</body>
</html>
A와 B는 다음과 같아야합니다. http://domain.com
편집하다:
에서 또 다른 질문 , 그것은 도메인 (여기에서 A와 B)가 있어야합니다 보이는 /
를 들어 postMessage
제대로 작동합니다.
답변
로드 후 프레임에서 상위로 메시지를 게시해야합니다.
프레임 스크립트 :
$(document).ready(function() {
window.parent.postMessage("I'm loaded", "*");
});
그리고 부모님 께 들어 :
function listenMessage(msg) {
alert(msg);
}
if (window.addEventListener) {
window.addEventListener("message", listenMessage, false);
} else {
window.attachEvent("onmessage", listenMessage);
}
자세한 정보는이 링크를 사용하십시오. http://en.wikipedia.org/wiki/Web_Messaging
답변
아마도 mydomain.com에서 www.mydomain.com으로 데이터를 보내려고하거나 반대로 보내려고 할 것입니다. “www”를 놓쳤습니다. http://mydomain.com 및 http://www.mydomain.com 은 javascript 와 다른 도메인입니다.