আইফ্রামের সামগ্রীগুলি পিতামাতার পৃষ্ঠা থেকে পুরোপুরি লোড হয়ে যাওয়ার পরে কি ক্যাপচার করার কোনও উপায় আছে?
আইফ্রামের সামগ্রীগুলি পিতামাতার পৃষ্ঠা থেকে পুরোপুরি লোড হয়ে যাওয়ার পরে কি ক্যাপচার করার কোনও উপায় আছে?
উত্তর:
<iframe>
উপাদানগুলির জন্য এটির একটি load
ইভেন্ট রয়েছে ।আপনি কীভাবে এই ইভেন্টটি শোনেন তা আপনার উপর নির্ভর করে তবে সাধারণত সর্বোত্তম উপায় হ'ল:
1) আপনার iframe প্রোগ্রামক্রমে তৈরি করুন
এটি নিশ্চিত করে যে আপনার load
শ্রোতা যদি সর্বদা iframe লোডিং শুরু হওয়ার আগে এটি সংযুক্ত করে ডেকে আনে ।
<script>
var iframe = document.createElement('iframe');
iframe.onload = function() { alert('myframe is loaded'); }; // before setting 'src'
iframe.src = '...';
document.body.appendChild(iframe); // add it to wherever you need it in the document
</script>
2) ইনলাইন জাভাস্ক্রিপ্ট , হ'ল অন্য উপায় যা আপনি আপনার এইচটিএমএল মার্কআপের অভ্যন্তরে ব্যবহার করতে পারেন।
<script>
function onMyFrameLoad() {
alert('myframe is loaded');
};
</script>
<iframe id="myframe" src="..." onload="onMyFrameLoad(this)"></iframe>
3) আপনি কোনও ট্যাগের ভিতরে উপাদানটির পরে ইভেন্ট শ্রোতাদেরও সংযুক্ত করতে পারেন <script>
, তবে মনে রাখবেন যে এই ক্ষেত্রে আপনার সাম্রাজ্য যুক্ত করার সময় ইফরামটি ইতিমধ্যে লোড হয়ে গেছে। সুতরাং এটি সম্ভবত বলা হবে না (যেমন যদি iframe খুব দ্রুত হয়, বা ক্যাশে থেকে আগত)।
<iframe id="myframe" src="..."></iframe>
<script>
document.getElementById('myframe').onload = function() {
alert('myframe is loaded');
};
</script>
এছাড়াও উপাদানগুলির এই ধরণের ইভেন্টে আগুন লাগাতে পারে সে সম্পর্কে আমার অন্যান্য উত্তরও দেখুনload
addEventListener
একাধিক callbacks লোড ইভেন্টে চালাতে সক্ষম।
উপরের উত্তরগুলির কোনোটাই আমার পক্ষে কাজ করেনি, তবে এটি করেছে
আপডেট :
@ ডপলপ্যাঞ্জার নীচের দিকে ইঙ্গিত করেছেন যে, jQuery 3.0 হিসাবে লোড চলে গেছে, সুতরাং এটি ব্যবহার করে একটি আপডেট সংস্করণ on
। অনুগ্রহ করে নোট করুন এটি আসলে jQuery 1.7+ এ কাজ করবে, আপনি এখনও jQuery 3.0 এ না থাকলেও আপনি এটিকে এভাবে প্রয়োগ করতে পারেন।
$('iframe').on('load', function() {
// do stuff
});
load
চলে গেছে। .on('load', function() { ... })
পরিবর্তে ব্যবহার করুন।
jquery
বা হয় jqLite
তবে এই উপায়!
ভ্যানিলা জাভাস্ক্রিপ্টে এর জন্য আরও একটি সামঞ্জস্যপূর্ণ উপায় ( কেবলমাত্র আই 9 + এর জন্য ) রয়েছে:
const iframe = document.getElementById('iframe');
const handleLoad = () => console.log('loaded');
iframe.addEventListener('load', handleLoad, true)
এবং যদি আপনি পর্যবেক্ষণে আগ্রহী হন তবে এটি কৌশলটি করবে:
return Observable.fromEventPattern(
handler => iframe.addEventListener('load', handler, true),
handler => iframe.removeEventListener('load', handler)
);
handleLoad()
আইফ্রেম রেন্ডারটি দেখার আগে আমার ডিবাগারটি আমার ব্রেকপয়েন্টে থামার বিষয়টি কী উদ্বেগের বিষয় ? আমি আশা করি এটি কোনও সামগ্রী লোডিং ইস্যুর পরিবর্তে সম্পূর্ণরূপে একটি রেন্ডারিং ইস্যু।
মনে রাখবেন যে অফস্ক্রিনের সময় iframe লোড করা থাকলে ওলোডলোড ইভেন্টটি আগুন লাগবে না। "নতুন উইন্ডোতে খুলুন" / ডাব্লু ট্যাব ব্যবহার করার সময় এটি প্রায়শই ঘটে।
আপনি এইভাবে jquery প্রস্তুত ইভেন্ট ক্যাপচার করতে পারেন:
$('#iframeid').ready(function () {
//Everything you need.
});
এখানে একটি কার্যকারী উদাহরণ: