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ẹ:
- Nạp iframe (điều này là không đồng bộ, quá)
- Thiết lập thông điệp nghe
- nhắn Đăng lên khung nội tuyến (chỉ cố gắng ở đây)
- Đợi thêm tin nhắn để đến
Trong ifram e:
- Thiết lập thông điệp nghe
- Nhắn tin đến cửa sổ cha mẹ (chỉ cố gắng ở đây)
- 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.