2012-01-30 19 views
5

मैं सीधे क्रॉस-डोमेन संचार के लिए window.postMessage का उपयोग करने की सोच रहा हूं।क्या मैं window.postMessage के साथ संचारित सिंक्रोनस क्रॉस-डोमेन कर सकता हूं?

तो मुझे क्या करना: माता-पिता फ्रेम से

  1. postMessage()
  2. लोड एक iframe
  3. window.addEventListener("message", callback, false); बच्चे iframe से

जब होगा संदेशों मैं लोड हो रहा है आइफ्रेम हो से पहले पोस्ट मार डाला? क्या वे बिल्कुल निष्पादित होने की गारंटी रखते हैं? क्या समय गारंटी है?

मैं शीर्ष फ्रेम से पैरामीटर पास करना चाहता हूं जो बाल फ्रेम के प्रारंभ को प्रभावित करता है।

उत्तर

6

पोस्ट मैसेज() फ़ंक्शन असीमित है, जिसका अर्थ है कि यह तुरंत वापस आ जाएगा। तो आप इसके साथ तुल्यकालिक संचार नहीं कर सकते हैं।

आपके उदाहरण में, पोस्ट किया गया संदेश शून्य में गायब हो जाएगा, क्योंकि पोस्ट मैसेज() फ़ंक्शन निष्पादित होने पर संदेश ईवेंट के लिए कोई श्रोता नहीं है।

यदि आप पहले आईफ्रेम लोड करेंगे और पोस्टमेसेज() को बाद में कॉल करेंगे, तो शायद एक समय समस्या हो सकती है। (मेरे अनुभव से कोई नहीं है, पैरेंट कोड हमेशा पहले निष्पादित होता है, लेकिन मुझे इस बिंदु के बारे में निश्चित नहीं है।)

नीचे यह जानने के लिए मेरा समाधान है कि आईफ्रेम तैयार होने पर बिल्कुल सही नहीं है।

माता पिता विंडो में:

  1. लोड iframe (इस अतुल्यकालिक है, भी)
  2. आइफ्रेम (बस यहाँ की कोशिश कर रहा)
  3. -
  4. पोस्ट संदेश सेट करें संदेश श्रोता

ifram में आने के लिए अधिक संदेश प्रतीक्षा करें ई:

  1. सेट करें संदेश श्रोता
  2. माता पिता खिड़की (सिर्फ यहां की कोशिश कर रहा) और संदेश के लिए
  3. इंतजार करना
  4. पोस्ट संदेश आने के लिए

जो कोई भी एक दूसरे से पहले संदेश प्राप्त करता है पक्ष तो असली संचार शुरू करता है।

मेरे अनुभव में, माता-पिता से आईफ्रेम का संदेश हमेशा खो जाता है, इसलिए संचार शुरू होता है जब माता-पिता को आईफ्रेम से संदेश प्राप्त होता है। लेकिन इस सेटअप में यह महत्वपूर्ण नहीं है कि कोई पहले शुरू होता है।