Iframe लोड पूरा घटना पर कब्जा


जवाबों:


197

<iframe>तत्वों के लिए एक loadघटना है।


आप उस घटना को कैसे सुनते हैं, यह आप पर निर्भर करता है, लेकिन आमतौर पर सबसे अच्छा तरीका यह है:

1) अपने आइफ्रेम को प्रोग्रामेटिक रूप से बनाएं

यह सुनिश्चित करता है कि आपके 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) इनलाइन जावास्क्रिप्ट , एक और तरीका है जिसका उपयोग आप अपने HTML मार्कअप के अंदर कर सकते हैं।

<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जो कई कॉलबैक लोड घटना पर चलाने के लिए अनुमति देता है।
8

1
यह दृष्टिकोण दौड़ की स्थिति के लिए भी असुरक्षित है क्योंकि स्क्रिप्ट टैग निष्पादित होने से पहले iframe लोड हो सकता है।
8

7
जब आप फ़ाइल डाउनलोड करने का प्रयास करते हैं तो लोड ईवेंट काम नहीं करता है।
जेरी

1
हां, यह IE में काम नहीं करता है यदि iFrame सामग्री HTML, उदाहरण के लिए पीडीएफ नहीं है। इसे देखें: connect.microsoft.com/IE/feedback/details/809377/…
सर्गेई गुसाक

27

उपरोक्त में से किसी भी उत्तर ने मेरे लिए काम नहीं किया, हालांकि यह किया

अद्यतन :

जैसा कि @doppleganger ने नीचे बताया है, लोड 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

इसके लिए वेनिला जावास्क्रिप्ट में एक और सुसंगत तरीका है ( केवल IE9 + के लिए ):

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 द्वारा उस घटना पर कब्जा करने के लिए जब iframe पहले से ही वहाँ है ... यानी: iframe jquery द्वारा नहीं बनाया गया है।
गुमरुह

3

ध्यान दें कि अगर स्क्रीन को ऑफस्क्रीन लोड किया जाता है तो ऑनलोड घटना में आग नहीं लगती है। "ओपन इन न्यू विंडो" / w टैब का उपयोग करते समय यह अक्सर होता है।


2
इसके अलावा iframes with no none;)
Felipe N Moura

1

तुम भी इस तरह से jquery तैयार घटना पर कब्जा कर सकते हैं:

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

यहाँ एक काम कर उदाहरण है:

http://jsfiddle.net/ZrFzF/


16
मुझे नहीं लगता कि कोड वह करता है जो आपको लगता है कि यह करता है। आप उस "#iFrame" चयनकर्ता को किसी भी चीज़ के साथ अपनी बेला में बदल सकते हैं और चेतावनी अभी भी आग लगा सकती है
roryok

6
@Roryok के अलावा, DOM के तैयार होने पर तैयार आग, पूरे पेज को लोड नहीं करता है।
इवान निकितिन

1
जब DOM तैयार हो जाता है और js को निष्पादित किया जा सकता है, तब तैयार नहीं किया जाता है, जब सामग्री लोड नहीं होती है।
सर्गेई गुसाक

2
$ ("# iframeid") तैयार है जब तत्व डोम में है तो फ़ंक्शन को ट्रिगर करता है। नहीं जब ifram लोड हो रहा है।
पोपसिजुनियर

यह सिर्फ एक बार कहा जाता है :(
होसैन बद्रनेज़हाद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.