Iframe লোড সম্পূর্ণ ইভেন্ট ক্যাপচার


137

আইফ্রামের সামগ্রীগুলি পিতামাতার পৃষ্ঠা থেকে পুরোপুরি লোড হয়ে যাওয়ার পরে কি ক্যাপচার করার কোনও উপায় আছে?


উত্তর:


197

<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


2
ধন্যবাদ, এটি আমার যা প্রয়োজন ঠিক তা করে!
জাইমে গার্সিয়া

1
এই পদ্ধতির সাহায্যে আপনি কেবলমাত্র iframe লোড হয়ে গেলে একক ফাংশন চালাতে পারেন। দেখুন নিচের আমার উত্তর ব্যবহার addEventListenerএকাধিক callbacks লোড ইভেন্টে চালাতে সক্ষম।
ইস্টে

1
স্ক্রিপ্ট ট্যাগটি কার্যকর করার আগে iframe লোড করতে পারায় এই পদ্ধতির প্রতিযোগিতার অবস্থাও ঝুঁকির মধ্যে রয়েছে।
ইস্টে

7
আপনি কোনও ফাইল ডাউনলোড করার চেষ্টা করার সময় লোড ইভেন্টটি কাজ করে না।
জেরি

1
হ্যাঁ, এটি আইফ্রেমে কাজ করে না যদি আইফ্রেম সামগ্রীটি এইচটিএমএল নয়, যেমন পিডিএফ। এটি দেখুন: কানেক্ট
করুন.মাইক্রোসফট / আইই / ফেডব্যাক / ডেটেলস / ৮০৯৩77

27

উপরের উত্তরগুলির কোনোটাই আমার পক্ষে কাজ করেনি, তবে এটি করেছে

আপডেট :

@ ডপলপ্যাঞ্জার নীচের দিকে ইঙ্গিত করেছেন যে, jQuery 3.0 হিসাবে লোড চলে গেছে, সুতরাং এটি ব্যবহার করে একটি আপডেট সংস্করণ on। অনুগ্রহ করে নোট করুন এটি আসলে jQuery 1.7+ এ কাজ করবে, আপনি এখনও jQuery 3.0 এ না থাকলেও আপনি এটিকে এভাবে প্রয়োগ করতে পারেন।

$('iframe').on('load', function() {
    // do stuff 
});

1
JQuery 3.0 হিসাবে, loadচলে গেছে। .on('load', function() { ... })পরিবর্তে ব্যবহার করুন।
ডপেলগঙ্গার

যদি আপনার ব্যবহার হয় jqueryবা হয় jqLiteতবে এই উপায়!
পিটার

11

ভ্যানিলা জাভাস্ক্রিপ্টে এর জন্য আরও একটি সামঞ্জস্যপূর্ণ উপায় ( কেবলমাত্র আই 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()আইফ্রেম রেন্ডারটি দেখার আগে আমার ডিবাগারটি আমার ব্রেকপয়েন্টে থামার বিষয়টি কী উদ্বেগের বিষয় ? আমি আশা করি এটি কোনও সামগ্রী লোডিং ইস্যুর পরিবর্তে সম্পূর্ণরূপে একটি রেন্ডারিং ইস্যু।
শ্রীধর সারনোবাত

কীভাবে সেই ইভেন্টটি jquery দ্বারা ক্যাপচার করবেন যখন ইফ্রেমে ইতিমধ্যে উপস্থিত আছে ... অর্থাত্: আইফ্রেমে jquery দ্বারা তৈরি করা হয়নি।
gumuruh

3

মনে রাখবেন যে অফস্ক্রিনের সময় iframe লোড করা থাকলে ওলোডলোড ইভেন্টটি আগুন লাগবে না। "নতুন উইন্ডোতে খুলুন" / ডাব্লু ট্যাব ব্যবহার করার সময় এটি প্রায়শই ঘটে।


2
এছাড়াও ডিসপ্লে সহ আইফ্রেমে কোনওটি নেই;)
ফিলিপ এন মৌরা

1

আপনি এইভাবে jquery প্রস্তুত ইভেন্ট ক্যাপচার করতে পারেন:

$('#iframeid').ready(function () {
//Everything you need.
});

এখানে একটি কার্যকারী উদাহরণ:

http://jsfiddle.net/ZrFzF/


16
আমি মনে করি না যে কোডটি আপনার মনে হয় যা এটি করে। আপনি নিজের ফিডলে সেই "# আইফ্রেম" নির্বাচককে যে কোনও কিছু দিয়ে এবং সতর্কতাটি এখনও জ্বালিয়ে দিতে পারেন
roryok

6
@ ররিওক ছাড়াও, ডওএম প্রস্তুত হওয়ার সময় প্রস্তুত আগুন জ্বলতে থাকে, পুরো পৃষ্ঠাটি বোঝা হয় না।
ইভান নিকিতিন

1
যখন ডিওএম প্রস্তুত থাকে তখন প্রস্তুত বরখাস্ত করা হয় এবং বিষয়বস্তু লোড হওয়ার পরে নয়, জেএস কার্যকর করা যেতে পারে।
সের্গেই গুসাক

2
"(" # iframeid ")। উপাদান ডোমে থাকা অবস্থায় ফাংশনটিকে ট্রিগার করে। ইফরামের লোডিং শেষ হয়ে গেলে নয়।
পপসুঞ্জিয়র

এটি কেবল একবার ডেকেছিল :(
হোসেইন বদরনেজাদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.