Iframe में वेबसाइट एक ही डोमेन में स्थित नहीं है , लेकिन दोनों मेरे हैं, और मैं iframe
और मूल साइट के बीच संवाद करना चाहूंगा । क्या यह संभव है?
Iframe में वेबसाइट एक ही डोमेन में स्थित नहीं है , लेकिन दोनों मेरे हैं, और मैं iframe
और मूल साइट के बीच संवाद करना चाहूंगा । क्या यह संभव है?
जवाबों:
विभिन्न डोमेन के साथ, विधियों को कॉल करना या सीधे iframe के सामग्री दस्तावेज़ तक पहुंचना संभव नहीं है।
आपको क्रॉस-दस्तावेज़ मैसेजिंग का उपयोग करना होगा ।
शीर्ष विंडो में उदाहरण के लिए:
myIframe.contentWindow.postMessage('hello', '*');
और iframe में:
window.onmessage = function(e){
if (e.data == 'hello') {
alert('It works!');
}
};
यदि आप iframe से पैरेंट विंडो पर संदेश पोस्ट कर रहे हैं
window.top.postMessage('hello', '*')
window.onmesage = function()...
:। आईफ्रेम में:window.top.postMessage('hello', '*')
file://C:/Windows/system32/whatever
एक वेबपेज पर एक लिंक डाल सकते हैं और इसे उपयोगकर्ता के सिस्टम फ़ोल्डर में सही कर सकते हैं। इन दिनों ब्राउज़र ज्यादातर उसी तरह लिंक पर क्लिक को नजरअंदाज करते हैं। एक वेबसर्वर चलाएं और उसके माध्यम से अपने कोड तक पहुंचें और आपको त्रुटियां दिखाई देंगी।
window.frames[index]
चाइल्ड फ्रेम ( <iframe>, <object>, <frame>
), के बराबर पाने के लिए भी उपयोग कर सकते हैं getElementsByTagName("iframe")[index].contentWindow
। IFrames से पेरेंट विंडो ऑब्जेक्ट प्राप्त करने के लिए, यह उपयोग करना बेहतर है window.parent
, जैसा window.top
कि टॉप मोस्ट पेरेंट विंडो का प्रतिनिधित्व करता है
यह यहाँ होना चाहिए, क्योंकि 2012 से स्वीकृत उत्तर
2018 और आधुनिक ब्राउज़रों में आप iframe से मूल विंडो में एक कस्टम ईवेंट भेज सकते हैं।
आइफ्रेम:
var data = { foo: 'bar' }
var event = new CustomEvent('myCustomEvent', { detail: data })
window.parent.document.dispatchEvent(event)
माता-पिता:
window.document.addEventListener('myCustomEvent', handleEvent, false)
function handleEvent(e) {
console.log(e.detail) // outputs: {foo: 'bar'}
}
पुनश्च: बेशक, आप विपरीत दिशा में घटनाओं को उसी तरह भेज सकते हैं।
document.querySelector('#iframe_id').contentDocument.dispatchEvent(event)
dispatchEvent
सभी प्रमुख ब्राउज़रों में समर्थित है। IE9 वह पहला संस्करण था जो इसमें आया था, इसलिए अधिकांश OS अब इसके साथ काम करते हैं। caniuse.com/#search=dispatchEvent
यह लाइब्रेरी HTML5 पोस्टमैसेज और लीगेसी ब्राउजर्स को resize + hash के साथ सपोर्ट करती है https://github.com/ternarylabs/poroleole के साथ है
संपादित करें: अब 2014 में, IE6 / 7 का उपयोग काफी कम है, IE8 और सभी समर्थन से ऊपर postMessage
इसलिए मैं अब केवल इसका उपयोग करने का सुझाव देता हूं।
https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage
window.top
संपत्ति आपको क्या चाहिए देने के लिए सक्षम होना चाहिए।
उदाहरण के लिए
alert(top.location.href)
आप भी उपयोग कर सकते हैं
postMessage(message, '*')
;
event.source.window.postMessage
प्रेषक को वापस भेजने के लिए उपयोग करें ।
इफ्रेम से
window.top.postMessage('I am Iframe', '*')
window.onmessage = (event) => {
if (event.data === 'GOT_YOU_IFRAME') {
console.log('Parent received successfully.')
}
}
फिर माता-पिता से वापस कहते हैं।
window.onmessage = (event) => {
event.source.window.postMessage('GOT_YOU_IFRAME', '*')
}