আইফ্রেমে ওয়েবসাইটটি একই ডোমেনে অবস্থিত নয় তবে উভয়ই আমার এবং আমি 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
। আইফ্রেমস থেকে পেন্টেন্ট উইন্ডো অবজেক্ট পেতে, ব্যবহার করা ভাল window.parent
, window.top
শীর্ষ পিতা বা মাতা উইন্ডোর প্রতিনিধিত্ব হিসাবে
এটি অবশ্যই এখানেই থাকবে, কারণ 2012 থেকে গৃহীত উত্তর
2018 এবং আধুনিক ব্রাউজারগুলিতে আপনি আইফ্রেমে থেকে প্যারেন্ট উইন্ডোতে একটি কাস্টম ইভেন্ট পাঠাতে পারেন।
আইফ্রেম:
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
সমস্ত বড় ব্রাউজারে সমর্থিত। আইই 9 এটির প্রথম সংস্করণ ছিল, সুতরাং বেশিরভাগ ওএস এখন এটি নিয়ে কাজ করে। caniuse.com/#search=dispatchEvent
এই লাইব্রেরিটি এইচটিএমএল 5 পোস্টমেসেজ এবং লিগ্যাসি ব্রাউজারগুলিকে পুনরায় আকার + হ্যাশ https://github.com/ternarylabs/porthole সমর্থন করে
সম্পাদনা করুন: এখন ২০১৪-এ, postMessage
আই 6 / usage ব্যবহার বেশ কম, আই 8 এবং সর্বোপরি সমর্থন তাই এখন আমি এটি ব্যবহার করার পরামর্শ দিই।
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', '*')
}