जब एक iframe jQuery में लोड करना समाप्त कर लेता है तो मैं एक घटना को कैसे फायर करूं?


95

मुझे एक पृष्ठ के भीतर एक पीडीएफ लोड करना है।

आदर्श रूप में मैं एक लोडिंग एनिमेटेड जिफ लेना चाहूंगा जो पीडीएफ लोड होने के बाद बदल दिया जाता है।

जवाबों:


38

मुझे पूरा यकीन है कि यह नहीं किया जा सकता है।

पीडीएफ के अलावा बहुत कुछ और भी काम करता है, यहां तक ​​कि फ्लैश भी। (सफारी, फ़ायरफ़ॉक्स 3, आईई 7 पर परीक्षण किया गया)

बहुत बुरा।


Fwiw, उन सभी को (यहां तक कि पीडीएफ) ओएस एक्स पर Chrome के साथ मेरे लिए काम किया
pkaeding

हाँ यह क्रोम में काम करता है लेकिन IE में नहीं। यदि आवेदन वेब पर है, तो उसे IE में भी काम करना होगा।
रॉबर्ट स्मिथ

214

आपने कोशिश की है:

$("#iFrameId").on("load", function () {
    // do something once the iframe is loaded
});

19
+1 क्योंकि यह iframe में PDF की लोडिंग के लिए काम नहीं करता है, इसलिए यह अन्य सामग्री प्रकारों के लिए उपयोगी है।
कोरी हाउस

3
+1 बिल्कुल नहीं जो मूल प्रश्नकर्ता जानना चाहता था (पीडीएफ के संबंध में), लेकिन यह जवाब इस सवाल से मेल खाता है "मैं एक घटना को कैसे बुझाता हूं जब एक आइफ्रेम ने jQuery में लोड करना समाप्त कर दिया है?" । धन्यवाद
हार्वे Darvey

इसे PDF के साथ आज़माया नहीं गया, लेकिन यह सामान्य URL के लिए पूरी तरह से चलेगा।
बॉब-ओप

मैं इसे अंदर उपयोग कर रहा हूं $(function({})ताकि फ्रेम पहले लोड हो जाए। लेकिन परिणाम के लिए उम्मीद नहीं की जा रही है। क्रोम 25 मैक
विलियम एंट्रीकेन

यह iframe में pdf लोड करने के लिए काम नहीं करता है। IE 11 में परीक्षण किया गया
रॉबर्ट स्मिथ

7

यह मेरे लिए था (पीडीएफ नहीं, लेकिन एक और " onloadप्रतिरोधी" सामग्री):

<iframe id="frameid" src="page.aspx"></iframe>
<script language="javascript">
    iframe = document.getElementById("frameid");

    WaitForIFrame();

    function WaitForIFrame() {
        if (iframe.readyState != "complete") {
            setTimeout("WaitForIFrame();", 200);
        } else {
            done();
        }
    }

    function done() {
        //some code after iframe has been loaded
    }
</script>  

उम्मीद है की यह मदद करेगा।


7
setTimeout () स्ट्रिंग तर्क से बचा जाना चाहिए:setTimeout(WaitForIFrame, 200);
स्टीफन माज्यूस्की

7

मैं यह कोशिश कर रहा हूं और मेरे लिए काम कर रहा है: http://jsfiddle.net/aamir/BXe8C/

बड़ी पीडीएफ फाइल: http://jsfiddle.net/aamir/BXe8C/1/


1
@Travis के उत्तर से बहुत अलग नहीं है, लेकिन मैं attr src परिवर्तन और सीएसएस के सुरुचिपूर्ण उपयोग के कारण +1 करूंगा। मैं किसी को कम से कम एक अच्छा लोडर को इस तरह से करते हुए देख सकता हूं।
एंथनी हट्ज़ोपुलोस

लोड घटना पीडीएफ से पहले पूरी तरह से भरी हुई है निकाल दिया।
एटिट्यूड

नवीनतम Chrome के साथ OSX पर अपने लिंक की कोशिश की और पहले पृष्ठ लोड पर, यह काम नहीं किया, रखा Loading PDF...लेकिन जब मैंने पृष्ठ को ताज़ा किया, तो कहा PDF Loaded!। लेकिन यह यूआरएल के साथ काम करने लगता है :) इसलिए यह मेरे लिए बहुत उपयोगी है। धन्यवाद!
गबेलरौक्स

यदि फ़ाइल को डाउनलोड करने के लिए सेट किया गया है, बजाय iframe में रेंडर किए यह काम नहीं करता है।
अंगूठी

यह IE 11 में काम नहीं करता है "पीडीएफ लोड हो रहा है ..." रखता है। मैं एक समाधान की तलाश कर रहा हूं जो IE 11. में काम करता है
मार्क

6
$("#iFrameId").ready(function (){
    // do something once the iframe is loaded
});

क्या आपने पहले से ही इसके बजाय कोशिश की है?


यह विधि अपेक्षा के अनुरूप काम नहीं करेगी। JQuery के डॉक्स से: "पहले से ही () विधि को वर्तमान दस्तावेज़ से मेल खाते jQuery ऑब्जेक्ट पर ही बुलाया जा सकता है, इसलिए चयनकर्ता को छोड़ा जा सकता है।" लगता है कि यह $ (दस्तावेज़) के बाद निकाल दिया जाएगा कोई फर्क नहीं पड़ता चयनकर्ता का इस्तेमाल किया।
काजुमा एनआई कैवलन्ती

मैं काफी निश्चित हूं कि यह निष्क्रिय सिद्धांत है।
बार्नी

पहले वाले उत्तर की पुनरावृत्ति!
सिंटेक्सRules

जैसा कि दूसरों ने कहा, मैंने इसका परीक्षण किया और यह काम नहीं किया। रेडी को डॉक्यूमेंट रेडी पर बुलाया गया था, आइफ्रेम नहीं ... यूज ऑन लोड विकल्प।
ग्रेग

5

मैंने इसके लिए आउट ऑफ बॉक्स अप्रोच की कोशिश की, मैंने इसे पीडीएफ कंटेंट के लिए टेस्ट किया, लेकिन इसने सामान्य HTML आधारित कंटेंट के लिए काम किया।

चरण 1 : एक तलाक आवरण में अपने आइफ्रेम लपेटें

चरण 2 : अपने div आवरण के लिए एक पृष्ठभूमि छवि जोड़ें:

.wrapperdiv{
  background-image:url(img/loading.gif);
  background-repeat:no-repeat;
  background-position:center center; /*Can place your loader where ever you like */
}

चरण 3 : उर iframe टैग में जोड़ें ALLOWTRANSPARENCY="false"

आइफ्रेम लोड होने के बाद रैपर डिप में लोडिंग एनीमेशन को दिखाने का विचार है, अगर यह लोड हो रहा है तो आइफ्रेम लोडिंग एनीमेशन को कवर करेगा।

कोशिश करो।


4

Jquery लोड और रेडी दोनों का उपयोग करना न तो वास्तव में मेल खाता था जब आइफ्रेम ट्रूली तैयार था।

मैंने इस तरह से कुछ करना समाप्त कर दिया

$('#iframe').ready(function () {
    $("#loader").fadeOut(2500, function (sender) {
        $(sender).remove();
    });
});

जहाँ # लोडर एक स्पिनर जिफ़ के साथ iframe के ऊपर एक पूरी तरह से स्थित div है।


2

@ ऐक्स अवे जो कि एक बुमर है। क्या होगा अगर आपके iframeपास एक HTML दस्तावेज़ था जो जैसा दिखता था:

<html>
  <head>
    <meta http-equiv="refresh" content="0;url=/pdfs/somepdf.pdf" />
  </head>
  <body>
  </body>
</html>

निश्चित रूप से एक हैक, लेकिन यह फ़ायरफ़ॉक्स के लिए काम कर सकता है। हालांकि मुझे आश्चर्य है कि अगर लोड घटना उस मामले में भी जल्द ही आग लग जाएगी।


Thats मैं क्या देख रहा हूँ :(
आमिर Afridi

1

मुझे लोडर दिखाना था जबकि iFrame में pdf लोड हो रही है तो मैं क्या कर रहा हूँ:

    loader({href:'loader.gif', onComplete: function(){
            $('#pd').html('<iframe onLoad="loader.close();" src="pdf" width="720px" height="600px" >Please wait... your report is loading..</iframe>');
    }
    });

मैं एक लोडर दिखा रहा हूँ। एक बार मुझे यकीन है कि ग्राहक मेरे लोडर को देख सकता है, मैं onCompllet लोडर विधि को कॉल कर रहा हूं जो एक iframe लोड करता है। Iframe में एक "onLoad" ईवेंट है। एक बार PDF लोड होने के बाद यह onloat इवेंट को ट्रिगर करता है जहाँ मैं लोडर को छिपा रहा हूँ :)

महत्वपूर्ण हिस्सा:

iFrame में "onLoad" ईवेंट है जहां आप वह कर सकते हैं जो आपको चाहिए (लोडर्स को छिपाएं आदि)


0

यहाँ मैं किसी भी कार्रवाई के लिए क्या कर रहा हूँ और यह फ़ायरफ़ॉक्स, IE, ओपेरा और सफारी में काम करता है।

<script type="text/javascript">
  $(document).ready(function(){
    doMethod();
  });
  function actionIframe(iframe)
  {
    ... do what ever ...
  }
  function doMethod()
  {   
    var iFrames = document.getElementsByTagName('iframe');

    // what ever action you want.
    function iAction()
    {
      // Iterate through all iframes in the page.
      for (var i = 0, j = iFrames.length; i < j; i++)
      {
        actionIframe(iFrames[i]);
      }
    }

    // Check if browser is Safari or Opera.
    if ($.browser.safari || $.browser.opera)
    {
      // Start timer when loaded.
      $('iframe').load(function()
      {
        setTimeout(iAction, 0);
      }
      );

      // Safari and Opera need something to force a load.
      for (var i = 0, j = iFrames.length; i < j; i++)
      {
         var iSource = iFrames[i].src;
         iFrames[i].src = '';
         iFrames[i].src = iSource;
      }
    }
    else
    {
      // For other good browsers.
      $('iframe').load(function()
      {
        actionIframe(this);
      }
      );
    }
  }
</script>

0

यदि आप डाउनलोड पूरा होने के बाद उपयोगकर्ता के लिए पॉप अप करने के लिए ब्राउज़र के ओपन / सेव इंटरफेस की उम्मीद कर सकते हैं, तो डाउनलोड शुरू होने पर आप इसे चला सकते हैं:

$( document ).blur( function () {
    // Your code here...
});

जब संवाद पृष्ठ के शीर्ष पर पॉप होता है, तो धब्बा घटना ट्रिगर हो जाएगी।


0

चूंकि पीडीएफ फाइल लोड होने के बाद, iframe डॉक्यूमेंट में एक नया DOM एलिमेंट होगा <embed/>, इसलिए हम इस तरह से चेक कर सकते हैं:

    window.onload = function () {


    //creating an iframe element
    var ifr = document.createElement('iframe');
    document.body.appendChild(ifr);

    // making the iframe fill the viewport
    ifr.width  = '100%';
    ifr.height = window.innerHeight;

    // continuously checking to see if the pdf file has been loaded
     self.interval = setInterval(function () {
        if (ifr && ifr.contentDocument && ifr.contentDocument.readyState === 'complete' && ifr.contentDocument.embeds && ifr.contentDocument.embeds.length > 0) {
            clearInterval(self.interval);

            console.log("loaded");
            //You can do print here: ifr.contentWindow.print();
        }
    }, 100); 

    ifr.src = src;
}

0

इस स्थिति के लिए मैंने जो समाधान लागू किया है वह है डोम में बस एक निरपेक्ष लोडिंग छवि को रखना, जो कि iframe लोड होने के बाद iframe लेयर द्वारा कवर किया जाएगा।

Iframe का z-index होना चाहिए (लोडिंग का z-index + 1), या उससे अधिक होना चाहिए।

उदाहरण के लिए:

.loading-image { position: absolute; z-index: 0; }
.iframe-element { position: relative; z-index: 1; }

आशा है कि यह मदद करता है अगर कोई javaScript समाधान नहीं किया। मुझे लगता है कि सीएसएस इन स्थितियों के लिए सबसे अच्छा अभ्यास है।

सादर।

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