Recharger un iframe avec jQuery

J'ai deux iframes sur une page et l'un apporte des modifications à l'autre mais l'autre iframe n'affiche pas le changement jusqu'à ce que je l'actualise. Existe-t-il un moyen facile d'actualiser cet iframe avec jQuery?

<div class="project">
  <iframe id="currentElement" class="myframe" name="myframe" src="http://somesite.com/something/new"></iframe>
</div>
136
demandé sur Nisse Engström 2010-11-22 23:15:42

17 réponses

Si l'iframe n'était pas sur un domaine différent, vous pouvez faire quelque chose comme ceci:

document.getElementById(FrameID).contentDocument.location.reload(true);

Mais puisque l'iframe est sur un domaine différent, vous serez refusé l'accès à la propriété contentDocument de l'iframe par la stratégie même origine .

Mais vous pouvez forcer hackishly l'iframe cross-domain à recharger si votre code est en cours d'exécution sur la page parent de l'iframe, en définissant son attribut src à lui-même. Comme ceci:

// hackishly force iframe to reload
var iframe = document.getElementById(FrameId);
iframe.src = iframe.src;

Si vous essayez de recharger l'iframe d'un autre iframe, vous êtes hors de la chance, que est pas possible.

158
répondu Alex 2010-11-22 20:24:14
$( '#iframe' ).attr( 'src', function ( i, val ) { return val; });
214
répondu Šime Vidas 2011-08-25 10:44:49

Vous pouvez également utiliser jquery. C'est la même chose que Alex a proposé juste en utilisant JQuery:

 $('#currentElement').attr("src", $('#currentElement').attr("src"));
43
répondu ynh 2010-11-22 20:25:59

Recharger une iframe avec jQuery

Faire un lien dans l'iframe disons avec id = "reload" puis utiliser le code suivant

$('#reload').click(function() {
    document.location.reload();
});

Et vous êtes bon pour aller avec tous les navigateurs.

Recharger un iframe avec HTML (Pas de script Java req.)

Il a une solution plus simple: qui fonctionne sans javaScript dans (FF, Webkit)

Il suffit de faire une ancre dans votre iframe

   <a href="#" target="_SELF">Refresh Comments</a>

Lorsque vous cliquez sur cette ancre, il suffit de rafraîchir votre iframe

Mais si vous avez le paramètre send à votre iframe, faites-le comme suit.

  <a id="comnt-limit" href="?id=<?= $page_id?>" target="_SELF">Refresh Comments</a>

N'ont pas besoin d'url de page parce que - > target= "_SELF" le faire pour vous

9
répondu 2011-12-25 10:42:28

Avec jquery, vous pouvez utiliser ceci:

$('#iframeid',window.parent.document).attr('src',$('#iframeid',window.parent.document).attr('src'));
8
répondu elin3t 2016-05-31 14:41:29

Juste réciproque de la réponse D'Alex mais avec jQuery

var currSrc = $("#currentElement").attr("src");
$("#currentElement").attr("src", currSrc);
5
répondu Matt Asbury 2010-11-22 20:26:59

Je suis sûr que tous les exemples ci-dessus ne rechargent que l'iframe avec son src d'origine, pas son URL actuelle.

$('#frameId').attr('src', function () { return $(this).contents().get(0).location.href });

Qui devrait se recharger en utilisant l'url actuelle.

3
répondu Mark 2013-05-07 00:30:37

Voici une autre façon

$( '#iframe' ).attr( 'src', function () { return $( this )[0].src; } );
3
répondu Nasir Mahmood 2014-10-25 07:23:52

Si vous êtes cross-domain, le simple fait de rétablir le src sur la même url ne déclenchera pas toujours un rechargement, même si le hachage de l'emplacement change.

A rencontré ce problème lors de la construction manuelle des iframes du bouton Twitter, qui ne s'actualiserait pas lorsque j'ai mis à jour les URL.

Twitter comme boutons ont la forme: .../tweet_button.html#&_version=2&count=none&etc=...

Puisque Twitter utilise le fragment de document pour l'url, la modification du hachage / fragment n'a pas rechargé la source, et les cibles de bouton ne reflétaient pas mon nouveau ajax le contenu chargé.

Vous pouvez ajouter un paramètre de chaîne de requête pour forcer le rechargement (par exemple: "?_=" + Math.random() mais cela gaspillera de la bande passante, en particulier dans cet exemple où L'approche de Twitter essayait spécifiquement d'activer la mise en cache.

Pour recharger quelque chose qui ne change qu'avec des balises de hachage, vous devez supprimer l'élément, ou changer le src, Attendre la sortie du thread, puis le réattribuer. Si la page est toujours mise en cache, cela ne devrait pas nécessiter un hit réseau, mais déclenche le cadre recharger.

 var old = iframe.src;
 iframe.src = '';
 setTimeout( function () {
    iframe.src = old;
 }, 0);

Update : L'utilisation de cette approche crée des éléments d'historique indésirables. Au lieu de cela, supprimez et recréez l'élément iframe à chaque fois, ce qui maintient ce bouton back() comme prévu. Aussi agréable de ne pas avoir la minuterie.

2
répondu greg.kindel 2011-12-30 16:06:33

Juste réciproque de la réponse D'Alex mais avec jQuery:

var e = $('#myFrame');
    e.attr("src", e.attr("src"));

Ou vous pouvez utiliser la petite fonction:

function iframeRefresh(e) {
    var c = $(e);
        c.attr("src", c.attr("src"));
}

J'espère que ça aide.

2
répondu Akm16 2014-01-16 14:11:06
$('IFRAME#currentElement').get(0).contentDocument.location.reload()
1
répondu Pavel 2016-08-22 21:17:32

C'est possible avec du JavaScript simple.

  • dans iFrame1, créez une fonction JavaScript appelée dans la balise body onload. Je l'ai vérifié une variable Côté Serveur que j'ai définie, donc il n'essaie pas d'exécuter la fonction JavaScript dans iframe2 sauf si j'ai pris une action spécifique dans iframe1. Vous pouvez configurer cela comme une fonction déclenchée par une pression sur le bouton ou comme vous le souhaitez dans iframe1.
  • Ensuite, dans iframe2, vous avez la deuxième fonction que je liste ci-dessous. La fonction dans iframe1 fondamentalement, va à la page parent, puis utilise la syntaxe window.frames pour déclencher une fonction JavaScript dans iframe2. Juste assurez-vous d'utiliser le id/name de iframe2 et pas la src.
//function in iframe1
function refreshIframe2()
{
    if (<cfoutput>#didValidation#</cfoutput> == 1)
    {   
         parent.window.frames.iframe2.refreshPage();
    }
}

//function in iframe2
function refreshPage()
{   
    document.location.reload();
}
1
répondu Keith Pastorek 2016-08-22 23:32:42
    ifrX =document.getElementById('id') //or 
    ifrX =frames['index'];

La solution multi-navigateur est:

    ifrX.src = ifrX.contentWindow.location

Ceci est utile surtout quand

0
répondu bortunac 2012-03-02 10:36:34

Résolu! Je m'inscris à stockoverflow juste pour vous partager la seule solution (au moins dans ASP.NET/IE/FF/Chrome) ça marche! L'idée est de remplacer la valeur innerHTML d'un div par sa valeur innerHTML actuelle.

Voici L'extrait HTML:

<div class="content-2" id="divGranite">
<h2>Granite Purchase</h2>
<IFRAME  runat="server" id="frameGranite" src="Jobs-granite.aspx" width="820px" height="300px" frameborder="0" seamless  ></IFRAME>
</div>

Et mon code Javascript:

function refreshGranite() {           
   var iframe = document.getElementById('divGranite')
   iframe.innerHTML = iframe.innerHTML;
}

J'espère que cela aide.

0
répondu hubert17 2013-04-11 09:39:39

, Vous devez utiliser

[0].src

Pour trouver la source de l'iframe et son URL doit être sur le même domaine du parent.

setInterval(refreshMe, 5000);
function refreshMe() {
    $("#currentElement")[0].src = $("#currentElement")[0].src;   
}
0
répondu Mauro 2016-02-10 05:46:44

/ / actualise toutes les iframes sur la page

var f_list = document.getElementsByTagName('iframe');

 for (var i = 0, f; f = f_list[i]; i++) {
                            f.src = f.src;
                        }
0
répondu wesley7 2017-02-16 08:19:48

Ci-dessous solution fonctionnera à coup sûr:

window.parent.location.href = window.parent.location.href;
-6
répondu Mamta 2012-10-10 11:50:33