Je voudrais recharger un <iframe>
utilisant JavaScript. La meilleure façon que j'ai trouvée jusqu'à présent était de définir l' src
attribut iframe sur lui-même, mais ce n'est pas très propre. Des idées?
javascript
iframe
caffo
la source
la source
src
attribut sur lui-même n'est pas propre? Il semble que ce soit la seule solution qui fonctionne sur tous les navigateurs et sur tous les domainessrc
attribut lui-même provoque des problèmes si vous disposez d'un lien ailleurs qui cible le<iframe>
. Ensuite, le cadre affichera la page initiale telle que conçue à l'origine.Réponses:
attention, dans Firefox,
window.frames[]
ne peut pas être indexé par id, mais par nom ou indexla source
frames[1].location.href.reload()
etwindow.frames['some_frame_id'].location.href.reload()
peut également être utiliséIl rechargera le
iframe
, même entre les domaines! Testé avec IE7 / 8, Firefox et Chrome.la source
document.getElementById('iframeid').src += '';
fonctionne également: jsfiddle.net/Daniel_Hug/dWm5kreload
mais cela est autorisé.http://example.com/#something
), cela ne rechargera pas le cadre. J'ai utilisé l'approche consistant à ajouter un paramètre de requête jetable comme?v2
à l'URL avant le hachage.Si vous utilisez jQuery, cela semble fonctionner:
J'espère que ce n'est pas trop moche pour stackoverflow.
la source
var iframe = document.getElementById("your_iframe"); iframe.src = src;
var iframe = document.getElementById("your_iframe"); iframe.src = iframe.src;
Ajouter un espace vide recharger également l'iFrame automatiquement.
la source
la source
En raison de la même politique d'origine , cela ne fonctionnera pas lors de la modification d'un iframe pointant vers un domaine différent. Si vous pouvez cibler des navigateurs plus récents, pensez à utiliser la messagerie croisée HTML5 . Vous voyez les navigateurs qui prennent en charge cette fonctionnalité ici: http://caniuse.com/#feat=x-doc-messaging .
Si vous ne pouvez pas utiliser la fonctionnalité HTML5, vous pouvez suivre les astuces décrites ici: http://softwareas.com/cross-domain-communication-with-iframes . Cette entrée de blog fait également un bon travail pour définir le problème.
la source
Je viens de me heurter à cela en chrome et la seule chose qui a fonctionné a été de supprimer et de remplacer l'iframe. Exemple:
Assez simple, non couvert dans les autres réponses.
la source
pour une nouvelle URL
La méthode assign () charge un nouveau document.
recharger
La méthode reload () est utilisée pour recharger le document actuel.
la source
Le simple remplacement de l'
src
attribut de l'élément iframe n'était pas satisfaisant dans mon cas car on verrait l'ancien contenu jusqu'à ce que la nouvelle page soit chargée. Cela fonctionne mieux si vous souhaitez donner un retour visuel instantané:la source
Un raffinement sur le post de yajra ... J'aime la pensée, mais je déteste l'idée de détection de navigateur.
Je préfère voir ppk utiliser la détection d'objets au lieu de la détection de navigateur ( http://www.quirksmode.org/js/support.html ), car vous testez en fait les capacités du navigateur et agissez en conséquence, plutôt que ce que vous pensez que le navigateur est capable de faire à ce moment-là. Ne nécessite pas non plus une analyse laide des chaînes d'ID de navigateur et n'exclut pas les navigateurs parfaitement capables dont vous ne savez rien.
Donc, au lieu de regarder navigator.AppName, pourquoi ne pas faire quelque chose comme ça, tester réellement les éléments que vous utilisez? (Vous pouvez utiliser des blocs try {} si vous voulez devenir encore plus chic, mais cela a fonctionné pour moi.)
De cette façon, vous pouvez essayer autant de permutations différentes que vous le souhaitez ou si cela est nécessaire, sans provoquer d'erreurs javascript, et faire quelque chose de raisonnable si tout le reste échoue. C'est un peu plus de travail pour tester vos objets avant de les utiliser, mais, OMI, rend le code meilleur et plus sûr.
A travaillé pour moi dans IE8, Firefox (15.0.1), Chrome (21.0.1180.89 m) et Opera (12.0.2) sous Windows.
Je pourrais peut-être faire encore mieux en testant la fonction de rechargement, mais cela me suffit pour le moment. :)
la source
Maintenant, pour que cela fonctionne sur Chrome 66, essayez ceci:
la source
Dans IE8 utilisant .Net, la définition
iframe.src
de la première fois est correcte, mais la définitioniframe.src
de la deuxième fois n'augmente paspage_load
la page iframed. Pour le résoudre, j'ai utiliséiframe.contentDocument.location.href = "NewUrl.htm"
.Découvrez-le lorsqu'il est utilisé jQuery thickBox et essayez de rouvrir la même page dans l'iframe de thickbox. Ensuite, il a juste montré la page précédente qui a été ouverte.
la source
Utilisez reload pour IE et définissez src pour les autres navigateurs. (le rechargement ne fonctionne pas sur FF) testé sur IE 7,8,9 et Firefox
la source
Si vous utilisez Jquery, il y a un code de ligne.
et si vous travaillez avec le même parent,
la source
Si tout ce qui précède ne fonctionne pas pour vous:
Pour une raison quelconque, cela a actualisé mon iframe au lieu du script entier. Peut-être parce qu'il est placé dans le cadre lui-même, alors que toutes ces solutions getElemntById fonctionnent lorsque vous essayez de rafraîchir un cadre à partir d'un autre cadre?
Ou je ne comprends pas tout cela et je parle de charabia, de toute façon cela a fonctionné pour moi comme un charme :)
la source
Avez-vous envisagé d'ajouter à l'URL un paramètre de chaîne de requête sans signification?
Il ne sera pas vu et si vous êtes conscient que le paramètre est sûr, alors ça devrait aller.
la source
Une autre solution.
la source
var url = ifr.src; ifr.src = null; ifr.src = url;
L'utilisation
self.location.reload()
rechargera l'iframe.la source
la source
Si vous avez essayé toutes les autres suggestions et que vous ne parvenez pas à en faire fonctionner une (comme je ne l'ai pas fait), voici quelque chose que vous pouvez essayer et qui peut être utile.
HTML
JS
J'ai d'abord essayé de gagner du temps avec les tests RWD et cross-browser. Je voulais créer une page rapide qui abritait un tas d'iframes, organisés en groupes que je montrerais / cacherais à volonté. Logiquement, vous souhaitez pouvoir actualiser facilement et rapidement un cadre donné.
Je dois noter que le projet sur lequel je travaille actuellement, celui utilisé dans ce banc d'essai, est un site d'une page avec des emplacements indexés (par exemple index.html # home). Cela peut avoir quelque chose à voir avec la raison pour laquelle je n'ai pu obtenir aucune des autres solutions pour rafraîchir mon cadre particulier.
Cela dit, je sais que ce n'est pas la chose la plus propre au monde, mais cela fonctionne pour mes besoins. J'espère que cela aide quelqu'un. Maintenant, si seulement je pouvais comprendre comment empêcher l'iframe de faire défiler la page parent à chaque fois qu'il y a une animation à l'intérieur de l'iframe ...
ÉDITER: J'ai réalisé que cela ne «rafraîchit» pas l'iframe comme je l'espérais. Il rechargera cependant la source initiale de l'iframe. Je n'arrive toujours pas à comprendre pourquoi je n'ai pas pu faire fonctionner les autres options ..
MISE À JOUR: La raison pour laquelle je n'ai pas réussi à faire fonctionner les autres méthodes est parce que je les testais dans Chrome, et Chrome ne vous permettra pas d'accéder au contenu d'une iframe (Explication: Est-il probable que les futures versions de Chrome prennent en charge le contenu Windows / contentDocument lorsque iFrame charge un fichier html local à partir d'un fichier html local? ) s'il ne provient pas du même emplacement (pour autant que je le comprenne). Après des tests supplémentaires, je ne peux pas non plus accéder à contentWindow dans FF.
JS AMENDÉ
la source
À des fins de débogage, on pourrait ouvrir la console changer le contexte d'exécution en le cadre qu'il veut rafraîchir et faire
document.location.reload()
la source