2013-05-20 14 views
11

आप दो आईफ्रेम एक-दूसरे से कैसे बात कर सकते हैं? उदाहरण के लिए मैं दूसरे आईफ्रेम से एक तत्व मान था और पहले iframe पर प्रदर्शन तत्व है। मुझे दूसरे फ्रेम को 1 से पहले मूल्य प्राप्त करने की आवश्यकता है। यह मैं कैसे करूंगा? उपयोग कुकीज़ का उपयोग न करें, क्योंकि यह बड़ी मात्रा में डेटा के साथ चोट पहुंचाएगा।iFrames के बीच संचार?

+4

सबसे पहले, एक ही डोमेन पर iframes कर रहे हैं? या वे विभिन्न साइटों से हैं? – BBog

+1

https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage – epascarello

+0

वे एक ही डोमेन हैं। तो दोनों http://www.example.com पर हैं – Matthew

उत्तर

17

यदि तत्व एक ही डोमेन से परोसे जाते हैं, तो वे सीधे एक दूसरे तक पहुंच सकते हैं। उदाहरण के लिए, iframe1 में तुम कर सकते हो:

document.getElementById('someDiv').innerHTML = 
    top.document.getElementById('otherIframe').contentWindow. 
    document.getElementById('someOtherDiv').innerHTML; 
+0

शीर्ष का उपयोग करके यह धारणा है कि यह कोड स्वयं फ्रेम में कभी लोड नहीं होगा, अन्यथा यह इंगित नहीं करेगा कि आप इसकी क्या अपेक्षा करते हैं। –

+0

@ मैटबेरकोविट्ज़ का क्या मतलब है? यदि आपके पास किसी पृष्ठ पर दो आइफ्रेम हैं और उनसे 'शीर्ष' पर कॉल करें, तो यह आपको वह विंडो प्रदान करता है जिससे आप अन्य आईफ्रेम ढूंढ सकते हैं। – jbabey

+16

नहीं, यह आपको सबसे ज्यादा फ्रेम देता है, जो माता-पिता या कुछ दादाजी हो सकता है, आदि। सेटअप पर विचार करें जिसे आपने अभी एक और आईफ्रेम के अंदर लोड किया है (हम नियंत्रित नहीं कर सकते कि कौन हमारे पृष्ठ को आईफ्रेम में लोड कर सकता है), शीर्ष इच्छा उस बाहरी पृष्ठ को वापस लौटाएं, जिसमें शायद 'अन्य' फ्रेम नहीं मिलेगा (और सीओआरएस आवश्यकताओं को भी पूरा नहीं कर सकता है)। 'शीर्ष' के बजाय 'पैरेंट' का उपयोग करना शायद थोड़ा बेहतर होगा क्योंकि यह गारंटी देता है कि आप ऐसा कर रहे हैं जो आप सोच रहे हैं कि आप क्या कर रहे हैं। –

5

मैं तुम्हें पहले चेतावनी देंगे कि अगर आप दोनों iframes के लिए पूर्ण कोड संशोधन क्षमताओं की आवश्यकता होगी। Iframes सख्त सुरक्षा के साथ इलाज किया जाता है; अन्यथा, मैं एक डोमेन "bunkofamerica.com" बना सकता हूं, एक iframe में "bankofamerica.com" डाल सकता हूं, और फिर उपयोगकर्ता के पासवर्ड का विश्लेषण करते समय इसका विश्लेषण करता हूं। (बैंकों iframe-पर्दाफाश कोड वैसे भी, लेकिन अभी भी हो जाते हैं ...)

आप इस देशी समारोह के लिए देख रहे: https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage

और यहाँ एक GitHub पुस्तकालय मेरी कंपनी इस अधिक पार बनाने के लिए उपयोग करता है ब्राउज़र संगत: https://github.com/daepark/postmessage

jbabey सही है, अगर iframes एक ही डोमेन और प्रोटोकॉल में हैं, तो यह आसान है।

ओपेरा डॉक्स सबसे अच्छा प्रासंगिक उदाहरण के साथ इस समझाया https://dev.opera.com/articles/window-postmessage-messagechannel/#channel

0

सबसे पहली बात, एक ही रास्ता एक फ्रेम के बाहर बातचीत कर सकते हैं की यह आत्म है अगर सामग्री दोनों स्थानों में भरी हुई अन्यथा आप जा रहे हैं एक ही डोमेन से है एक सीओआरएस त्रुटि प्राप्त करने के लिए।

मान लीजिए कि यह सब ग्रेवी है, मैं पैरेंट फ्रेम की विंडो ऑब्जेक्ट पर एक प्रबंधक ऑब्जेक्ट बनाउंगा।

window.Mgmt = { 
    frame1: $('iframe#frame1'), 
    frame2: $('iframe#frame2') 
} 
तो iframes आप उस वस्तु window.parent.Mgmt.frame1 का उपयोग कर उपयोग करने में सक्षम होना चाहिए में से किसी में

, आदि

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