code

도메인간에 window.postMessage를 어떻게 사용합니까?

codestyles 2020. 10. 8. 08:03
반응형

도메인간에 window.postMessage를 어떻게 사용합니까?


window.postMessage 의 요점은 다른 도메인에서 호스팅되는 창 / 프레임 간의 안전한 통신을 허용 하는 것 같지만 실제로 Chrome 에서는 허용 하지 않는 것 같습니다 .

시나리오는 다음과 같습니다.

  1. 도메인 A의 페이지에 <iframe> ( src도메인 B에 포함 * ) 삽입
  2. <iframe>은 대부분 <script> 태그로 끝나며 실행이 끝날 때 ...
  3. 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.postMessageparent.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제대로 작동합니다.


You should post a message from frame to parent, after loaded.

frame script:

$(document).ready(function() {
    window.parent.postMessage("I'm loaded", "*");
});

And listen it in parent:

function listenMessage(msg) {
    alert(msg);
}

if (window.addEventListener) {
    window.addEventListener("message", listenMessage, false);
} else {
    window.attachEvent("onmessage", listenMessage);
}

Use this link for more info: http://en.wikipedia.org/wiki/Web_Messaging


Probably you try to send your data from mydomain.com to www.mydomain.com or reverse, NOTE you missed "www". http://mydomain.com and http://www.mydomain.com are different domains to javascript.

참고URL : https://stackoverflow.com/questions/3457391/how-do-you-use-window-postmessage-across-domains

반응형