2012-11-27 15 views
11

का उपयोग कर दो आईफ्रेम बच्चों के बीच संचार मेरे पास कुछ एम्बेड कोड है जो उपयोगकर्ता अपनी साइट पर डाल सकते हैं। यह पृष्ठ पर दो बच्चों के iframes बनाता है। मैं उन बच्चों को संवाद करने में सक्षम होना चाहता हूं।पोस्ट मैसेज

मैं संदेशों के लिए एक रिले के रूप में जावास्क्रिप्ट की मूल window.postMessagehttps://developer.mozilla.org/en-US/docs/DOM/window.postMessage

के बाद से दो iframe बच्चों सीधे संवाद नहीं कर सकते हैं, मैं उपयोग कर रहा हूँ उपयोग कर रहा हूँ। हालांकि माता-पिता एक अलग डोमेन पर हो सकते हैं क्योंकि यह एम्बेड करने योग्य कोड है।

सभी तीन (माता-पिता और उनके दो बच्चे) एक ही डोमेन पर कर रहे हैं, यह बहुत आसान है और मैं इस सुरक्षा जांच e.origin जाँच के साथ काम किया है मेरी अपनी साइट

# coffeescript 
# host = "http://www.mysite.com" 
host = "http://localhost" 

receive_message = (e) -> 
    console.log("received message from " + e.origin + ": " + e.data) 
    return if e.origin != host 

    if e.data == "show" 
    ... 
    else if e.data == "hide" 
    ... 

window.addEventListener("message", receive_message, false) 

क्या एक सुंदर तरीका है उत्पत्ति की जांच करने के लिए जब माता-पिता किसी भी डोमेन पर हो सकते हैं?

स्क्रिप्ट के डिबगिंग की अनुमति देने का एक अच्छा तरीका क्या है जहां मूल लोकहोस्ट हो सकता है?

क्या विनाशकारी/बदलते संदेशों को पारित होने पर डेटा पैराम की जांच करना पर्याप्त है?

धन्यवाद!

उत्तर

12

आप क्यों कहते हैं कि बच्चे iframes सीधे संवाद नहीं कर सकते हैं? दरअसल, वे कर सकते हैं। बच्चे के आइफ्रेम के भीतर आप क्या कर सकते हैं, माता-पिता विंडो का संदर्भ प्राप्त करने के लिए window.parent प्रॉपर्टी का उपयोग करें, और उसके बाद सभी बच्चे iframes (frames संपत्ति के संदर्भ प्राप्त करने के लिए माता-पिता की frames प्रॉपर्टी का उपयोग करें) इस तरह के संदर्भों की एक श्रृंखला देता है)। उसके बाद, आप उन संदर्भों में से postMessage का उपयोग कर सकते हैं, और पोस्ट मैसेज कॉल में आवश्यक मूल restrictoin सेट कर सकते हैं ताकि आप सुनिश्चित हों कि केवल सही iframe संदेश प्राप्त हो।

सूचना है कि इस यहाँ तक कि जब सभी तीन खिड़कियों क्योंकि iframe1 माता पिता खिड़की के साथ कुछ भी (जो एसओपी का उल्लंघन होगा) नहीं कर रहा है (iframe1, माता पिता के खिड़की और iframe2) अलग डोमेन पर होते हैं काम करेंगे, तो वह केवल नेस्ट के लिए संदर्भ प्राप्त करने में कठिनाई है iframes।

लिंक:

https://developer.mozilla.org/en-US/docs/DOM/window.parent

https://developer.mozilla.org/en-US/docs/DOM/window.frames

+1

वाह - तुम सही हो! विश्वास नहीं कर सकता कि मुझे यह याद आया, मुझे नहीं पता था कि बाल iframes संवाद कर सकते हैं। महान काम किया, मदद के लिए धन्यवाद! –

+0

एनपी, कभी भी। :) –

+0

@IvanZuzak, (iframe1, पैरेंट विंडो और iframe2) अलग-अलग डोमेन पर हैं। अगर मैं iframe2 के कोड में parent.frames [1] .postMessage() का उपयोग करता हूं, तो मैं iframe2 को कैसे आश्वस्त कर सकता हूं। क्योंकि अगर iframe2 लोड नहीं होता है , postMessage() को कॉल करने से त्रुटि – wengeezhang

संबंधित मुद्दे