2012-01-30 3 views
5

도메인 간 통신에 window.postMessage을 직접 사용하려고 생각합니다.window.postMessage를 사용하여 동기식 도메인 간 통신을 수행 할 수 있습니까?

내가 할 경우 :

  1. postMessage() 상위 프레임에서
  2. 로드 iframe이
  3. window.addEventListener("message", callback, false);를 자식은 iframe에서

언제 내가 iframe이 될로드하기 전에 게시 된 메시지 처형 됐어? 그들은 전혀 처형을 당할 수 있습니까? 타이밍 보장이 있습니까?

상위 프레임에서 하위 프레임의 초기화에 영향을주는 매개 변수를 전달하고 싶습니다.

답변

6

postMessage() 함수는 비동기식이므로 즉시 반환됩니다. 그래서 당신은 그것과 동기식 통신을 할 수 없습니다.

postMessage() 함수가 실행될 때 메시지 이벤트에 대한 리스너가 없기 때문에 예제에서는 게시 된 메시지가 무효화됩니다.

iframe을 먼저로드하고 postMessage()를 호출하면 나중에 타이밍 문제가 발생할 수 있습니다. (내 경험에 의하면 부모 코드는 항상 먼저 실행되지만,이 시점에 대해서는 확실하지 않습니다.)

다음은 iframe 준비 시점을 정확하게 알지 못하는 문제에 대한 해결책입니다. 부모 창에서

:

  1. 로드 iframe이 (이 비동기도)
  2. 는 iframe이 (여기 시도)
  3. 에 메시지 리스너에게
  4. 포스트 메시지를 설정 더 많은 메시지가 올 때까지 기다려주십시오.

iframe E :

  1. 설정 메시지 리스너
  2. 는 부모 창 (여기 시도) 더 많은 메시지에 대한
  3. 대기에
  4. 후 메시지가 와서 다른에서 첫 번째 메시지를 수신 누구든지

측면에서 실제 통신을 시작합니다.

제 경험상 부모로부터 iframe으로 보내는 메시지는 항상 손실되므로 부모가 iframe에서 메시지를 받으면 통신이 시작됩니다. 그러나이 설정에서 어떤 것이 먼저 시작되는지는 중요하지 않습니다.

관련 문제