2012-01-30 26 views
5

Tôi đang nghĩ đến việc sử dụng trực tiếp window.postMessage để liên lạc giữa nhiều miền.Tôi có thể thực hiện giao tiếp giữa nhiều miền đồng bộ với window.postMessage không?

Nếu tôi làm:

  1. postMessage() từ khung mẹ
  2. tải một iframe
  3. window.addEventListener("message", callback, false); từ iframe con

Khi nào các thông điệp tôi gửi trước khi tải iframe được Thực thi? Họ có được đảm bảo thực thi không? Có bảo đảm thời gian không?

Tôi muốn chuyển một tham số từ khung trên cùng ảnh hưởng đến việc khởi tạo khung con.

Trả lời

6

Hàm postMessage() không đồng bộ, nghĩa là hàm sẽ trả về ngay lập tức. Vì vậy, bạn không thể thực hiện giao tiếp đồng bộ với nó.

Trong ví dụ của bạn, thông báo đã đăng sẽ biến mất trong khoảng trống, vì không có người nghe cho sự kiện tin nhắn tại thời điểm hàm postMessage() được thực hiện.

Nếu bạn tải khung nội tuyến trước và sau đó gọi hàm postMessage() thì có thể có sự cố về thời gian. (Từ kinh nghiệm của tôi không có, mã cha mẹ luôn luôn thực hiện đầu tiên, nhưng tôi không chắc chắn về điểm này.)

Dưới đây là giải pháp của tôi cho vấn đề không biết chính xác khi nào iframe sẵn sàng.

Trong cửa sổ cha mẹ:

  1. Nạp iframe (điều này là không đồng bộ, quá)
  2. Thiết lập thông điệp nghe
  3. nhắn Đăng lên khung nội tuyến (chỉ cố gắng ở đây)
  4. Đợi thêm tin nhắn để đến

Trong ifram e:

  1. Thiết lập thông điệp nghe
  2. Nhắn tin đến cửa sổ cha mẹ (chỉ cố gắng ở đây)
  3. Chờ cho các tin nhắn nhiều hơn đến

Ai nhận được tin nhắn đầu tiên từ khác bên cạnh đó bắt đầu giao tiếp thực sự.

Theo kinh nghiệm của tôi, thông báo từ cha mẹ đến khung nội tuyến luôn bị mất, vì vậy giao tiếp bắt đầu khi cha mẹ nhận được thông báo từ khung nội tuyến. Nhưng trong thiết lập này, nó không quan trọng cái nào bắt đầu trước.

Các vấn đề liên quan