97 votes

Comment déclencher un événement lorsqu'une iframe a fini de se charger en jQuery ?

Je dois charger un PDF dans une page.

Idéalement, j'aimerais avoir un gif animé qui se charge et qui est remplacé une fois le PDF chargé.

215voto

travis Points 14676

Avez-vous essayé :

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

20 votes

+1 car si cela ne semble pas fonctionner pour les PDF se chargeant dans l'iframe, c'est utile pour d'autres types de contenu.

3 votes

+1 Ce n'est pas exactement ce que l'auteur de la question initiale voulait savoir (par rapport au pdf), mais cette réponse correspond à la question "Comment puis-je déclencher un événement lorsqu'une iframe a fini de se charger en jQuery ?" . Merci

0 votes

Je n'ai pas essayé avec les PDF mais cela fonctionne parfaitement pour les URL normales.

38voto

Antti Sykäri Points 10381

Je suis presque certain que c'est impossible.

Presque tout ce qui n'est pas PDF fonctionne, même Flash. (Testé sur Safari, Firefox 3, IE 7)

Dommage.

0 votes

Pour info, tous ces éléments (même le PDF) ont fonctionné pour moi avec Chrome sous OS X.

0 votes

Oui, cela fonctionne dans Chrome mais pas dans IE. Si l'application est sur le web, elle doit aussi fonctionner dans IE.

7voto

Aamir Afridi Points 3865

J'essaie de le faire et cela semble fonctionner pour moi : http://jsfiddle.net/aamir/BXe8C/

Un fichier pdf plus grand : http://jsfiddle.net/aamir/BXe8C/1/

1 votes

Ce n'est pas très différent de la réponse de @travis mais j'ajouterai +1 à cause de l'utilisation élégante de attr src change et css. Je peux imaginer que quelqu'un puisse au moins faire semblant d'avoir un bon chargeur en procédant de cette façon.

0 votes

L'événement de chargement s'est déclenché avant le chargement complet du PDF.

0 votes

J'ai essayé vos liens sur OSX avec la dernière version de Chrome et au premier chargement de la page, cela n'a pas fonctionné. Loading PDF... mais quand j'ai rafraîchi la page, ça disait PDF Loaded! . Mais cela semble fonctionner avec les urls :) donc c'est très utile pour moi. Merci !

7voto

Cela a marché pour moi (pas de pdf, mais un autre " onload contenu "résistant") :

<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>  

J'espère que cela vous aidera.

7 votes

L'argument de chaîne setTimeout() doit être évité : setTimeout(WaitForIFrame, 200);

6voto

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

Avez-vous essayé .ready à la place ?

0 votes

Cette méthode ne fonctionnera pas comme prévu. Extrait de la documentation de JQuery : "La méthode .ready() ne peut être appelée que sur un objet jQuery correspondant au document actuel, le sélecteur peut donc être omis." On dirait qu'elle sera déclenchée après $(document), quel que soit le sélecteur utilisé.

0 votes

Je suis presque sûr que c'est une théorie sans intérêt.

0 votes

Répétition de la réponse précédente !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X