যখন কোনও আইফ্রেমে jQuery এ লোড করা শেষ করে ফেলেছি তখন কীভাবে আমি একটি ইভেন্টে গুলি করব?


95

আমি একটি পৃষ্ঠার মধ্যে একটি পিডিএফ লোড করতে হবে।

আদর্শভাবে আমি একটি লোডিং অ্যানিমেটেড জিআইএফ রাখতে চাই যা পিডিএফটি লোড হয়ে গেলে প্রতিস্থাপন করা হয়।

উত্তর:


38

আমি বেশ নিশ্চিত যে এটি করা যাবে না।

পিডিএফ, এমনকি ফ্ল্যাশ ছাড়াও খুব সুন্দর অন্য কিছু কাজ করে। (সাফারি, ফায়ারফক্স 3, আই 7 এ পরীক্ষিত)

খুব খারাপ.


FWIW, তাদের সব (এমনকি পিডিএফ) OS X এর উপর Chrome এর সঙ্গে আমার জন্য কাজ
pkaeding

হ্যাঁ এটি ক্রোমে কাজ করে তবে আইই তে নয়। অ্যাপ্লিকেশনটি ওয়েবে থাকলে এটি আইইতেও কাজ করতে হয়।
রবার্ট স্মিথ

214

আপনি চেষ্টা করেছেন:

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

19
+1 কারণ যদিও এটি আইফ্রেমে পিডিএফ'র লোডিংয়ের জন্য কাজ করে না, অন্য সামগ্রীগুলির জন্য এটি কার্যকর।
কোরি হাউস

4
+1 মূল প্রশ্নকর্তা ঠিক কী জানতে চেয়েছিলেন (পিডিএফের সাথে সম্পর্কিত) নয়, তবে এই উত্তরটি প্রশ্নের সাথে মিলে যায় "যদি কোনও আইফ্রেমে জিকুয়েরিতে লোড করা শেষ করে ফেলেছি তবে আমি কীভাবে একটি অনুষ্ঠানকে গুলি করব?" । ধন্যবাদ
হার্ভে ডারভে

এটি পিডিএফ দিয়ে চেষ্টা করে দেখেনি তবে এটি সাধারণ ইউআরএলগুলির জন্য পুরোপুরি চলবে।
বব-ওব

আমি এটি ভিতরে ব্যবহার করছি $(function({})যাতে ফ্রেমটি প্রথমে লোড হয়। তবে ফলাফলের আশা পাচ্ছি না। ক্রোম 25 ম্যাক
উইলিয়াম এন্টারিকেন

এটি iframe এ পিডিএফ লোড করার জন্য কাজ করে না। আইই ১১. তে পরীক্ষা করা হয়েছে
রবার্ট স্মিথ

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(WaitForIFrame, 200);
স্টেফান মাজেউজকি

7

আমি এটি চেষ্টা করছি এবং আমার জন্য কাজ করছে বলে মনে হচ্ছে: http://jsfiddle.net/aamir/BXe8C/

আরও বড় পিডিএফ ফাইল: http://jsfiddle.net/aamir/BXe8C/1/


4
@ ট্রাভিসের উত্তরের চেয়ে খুব আলাদা নয় তবে অ্যাট্রির এস সি সি পরিবর্তন এবং সিএসএসের মার্জিত ব্যবহারের কারণে আমি +1 করব। আমি কাউকে কমপক্ষে কোনও সুন্দর লোডারকে সেভাবে এটি করতে দেখছি।
অ্যান্থনি হাটজোপলোস

পিডিএফ সম্পূর্ণরূপে লোড হওয়ার আগে লোড ইভেন্টটি বরখাস্ত।
এটল্ডস

ওএসএক্স-এ আপনার সর্বশেষতম ক্রোম এবং প্রথম পৃষ্ঠার লোডের সাথে আপনার লিঙ্কগুলি ব্যবহার করার চেষ্টা করা হয়েছিল, এটি কাজ করে না, রাখে Loading PDF...তবে আমি পৃষ্ঠাটি রিফ্রেশ করার সময় বলেছিলেন PDF Loaded!। এটি ইউআরএলগুলির সাথে কাজ করে বলে মনে হয় :) তাই এটি আমার পক্ষে খুব দরকারী। ধন্যবাদ!
গ্যাবলাক্স

ফাইলটি ডাউনলোডের জন্য সেট করা থাকলে ইফ্রেমে রেন্ডারের পরিবর্তে এটি কাজ করে না।
রিং

এটি আইই ১১ তে কাজ করে না "পিডিএফ লোড হচ্ছে ..." রাখে। আমি একটি সমাধান খুঁজছি যা আইই ১১
মার্চ

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

আপনি চেষ্টা করেছেন। পরিবর্তে প্রস্তুত?


এই পদ্ধতিটি প্রত্যাশার মতো কাজ করবে না। জিকুয়েরি ডক্স থেকে: ".ডিডি () পদ্ধতিটি কেবলমাত্র বর্তমান নথির সাথে মিলে যাওয়া জ্যাকুয়েরি আইটেমে কল করা যেতে পারে, তাই নির্বাচক বাদ দেওয়া যায় can" এটির মতো শব্দগুলি নির্বাচক ব্যবহার না করেই $ (নথি) পরে বরখাস্ত করা হবে।
কাজুমা নিই কাভালকান্তি

আমি মোটামুটি নিশ্চিত এটি নিষ্ক্রিয় তত্ত্ব।
বার্নি

আগের উত্তরের পুনরাবৃত্তি!
সিন্ট্যাক্সের বিধি

অন্যরা যেমন বলেছে, আমি এটি পরীক্ষা করেছি এবং এটি কার্যকর হয়নি। রেডিকে ডকুমেন্ট রেডে ডেকে আনা হয়েছিল, আইফ্রেমে নয় ... অন লোড অপশনটি ব্যবহার করুন।
গ্রেগ

5

আমি এটির কাছে বক্স পদ্ধতির বাইরে গিয়ে চেষ্টা করেছি, আমি পিডিএফ বিষয়বস্তুর জন্য এটি পরীক্ষা করে দেখিনি তবে এটি সাধারণ এইচটিএমএল ভিত্তিক সামগ্রীর জন্য কাজ করেছে, কীভাবে এখানে:

পদক্ষেপ 1 : আপনার ইফ্রেমে একটি ডিভ র‍্যাপারে আবদ্ধ করুন

পদক্ষেপ 2 : আপনার ডিভ র‍্যাপারে একটি পটভূমি চিত্র যুক্ত করুন:

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

পদক্ষেপ 3 : আপনার ইফ্রেমে ট্যাগ যুক্ত করুন ALLOWTRANSPARENCY="false"

ধারণাটি হ'ল মোড়ক ডিভিতে লোডিং অ্যানিমেশনটি আইফ্রেমে লোড হওয়ার পরে আইফ্রেমে লোড হওয়ার পরে অ্যানিমেশনটি coverেকে দেবে till

একবার চেষ্টা করে দেখো.


4

Jquery লোড এবং রেডি উভয়ই ব্যবহার করা যখন ইফ্রেমটি সত্যই প্রস্তুত তখন সত্যিই মিলবে বলে মনে হয় নি।

আমি এরকম কিছু করে শেষ করেছি

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

যেখানে # লোডার স্পিনার জিআইএফ সহ আইফ্রেমে শীর্ষে একেবারে অবস্থিত ডিভ।


2

@ অ্যালেক্স ওভ! আপনার iframeযদি এমন কোনও এইচটিএমএল নথি থাকে যা দেখে মনে হয়:

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

অবশ্যই একটি হ্যাক, তবে এটি ফায়ারফক্সের জন্য কাজ করতে পারে। যদিও আমি ভাবছি যদি লোড ইভেন্টটি খুব শীঘ্রই সেই ক্ষেত্রে চালু হয়।


আমি যা খুঁজছি তা thats :(
আমির আফ্রিদি

1

আইফ্রেমে পিডিএফ লোড হওয়ার সময় আমাকে একটি লোডার দেখাতে হয়েছিল তাই আমি কী নিয়ে আসছি:

    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>');
    }
    });

আমি একটি লোডার দেখাচ্ছে একবার আমি নিশ্চিত হয়েছি যে গ্রাহকটি আমার লোডারটি দেখতে পাবে, আমি কল করছি কমপ্লিট লোডার পদ্ধতিতে যা একটি আইফ্রেম লোড করে। ইফরামের একটি "অনলয়েড" ইভেন্ট রয়েছে। পিডিএফটি লোড হয়ে গেলে এটি অনিয়মিত ইভেন্টে ট্রিগার করে যেখানে আমি লোডারটি আড়াল করছি :)

গুরুত্বপূর্ণ অংশ:

আইফ্রেমে "অনলোড" ইভেন্ট রয়েছে যেখানে আপনি যা প্রয়োজন তা করতে পারেন (লোডারগুলি আড়াল করুন ইত্যাদি)


0

এখানে আমি যে কোনও ক্রিয়াকলাপের জন্য যা করি তা এটি ফায়ারফক্স, আইই, অপেরা এবং সাফারিতে কাজ করে।

<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

এই পরিস্থিতিতে আমি যে সমাধানটি প্রয়োগ করেছি তা হ'ল ডিওমে একটি নিখুঁত লোডিং ইমেজ স্থাপন করা যা আইফ্রেমে লোড হওয়ার পরে যদি আইফ্রেমে স্তরটি beেকে যাবে।

ইফ্রেমের জেড-ইনডেক্সটি (লোডিংয়ের জেড-ইনডেক্স + 1), বা আরও বেশি হওয়া উচিত।

উদাহরণ স্বরূপ:

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

আশা করি কোনও জাভা স্ক্রিপ্ট সমাধান না করলে এটি সহায়তা করে। আমি মনে করি যে সিএসএস এই পরিস্থিতিতে সবচেয়ে ভাল অনুশীলন।

শুভেচ্ছান্তে.

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