Quelle est la meilleure façon de rafraîchir un iframe?
Je voudrais recharger un <iframe>
à l'aide de JavaScript. La meilleure façon que j'ai trouvé jusqu'à maintenant a été de définir l'iframe est src
attribut à lui-même, mais ce n'est pas très propre. Des idées?
- Est-il une raison pourquoi le réglage de la
src
de l'attribut lui-même n'est pas propre? Il semble être la seule solution qui fonctionne sur tous les navigateurs et entre les domaines
Vous devez vous connecter pour publier un commentaire.
être prudent, dans Firefox,
window.frames[]
ne peut pas être indexé par les id, mais par son nom ou de l'indexframes[1].location.href.reload()
etwindow.frames['some_frame_id'].location.href.reload()
peut également être utilisédocument.getElementById("iframeForCrossDomain").src="http://anotherdomain.com/index.html"
reload
cause à resoumettre (comme si vous cliquez sur le bouton actualiser de votre navigateur)? Si oui, que serait une différence significative entre les deux méthodes."?d=" + Date.now()
et qui semble résoudre le problèmeUncaught TypeError: Cannot read property 'location' of undefined
Il va recharger la
iframe
, même à travers les domaines!Testé avec IE7/8, Firefox et Chrome.
document.getElementById('iframeid').src += '';
fonctionne aussi: jsfiddle.net/Daniel_Hug/dWm5kreload
mais cela est autorisé.http://example.com/#something
), cela ne recharge pas le cadre. J'ai utilisé l'approche de l'ajout d'un jetable paramètre de requête comme?v2
à l'URL avant de la table de hachage.Si vous utilisez jQuery, cela semble fonctionner:
J'espère que c'est pas trop moche pour stackoverflow.
var iframe = document.getElementById("your_iframe"); iframe.src = src;
var iframe = document.getElementById("your_iframe"); iframe.src = iframe.src;
Ajouter un espace vide également recharger l'iFrame automatiquement.
En raison de la même la politique de l'origine, cela ne fonctionne pas lors de la modification d'une iframe pointant vers un domaine différent. Si vous pouvez cibler les navigateurs les plus récents, pensez à utiliser HTML5 de la Croix-document de messagerie. Vous affichez les navigateurs qui prennent en charge cette fonctionnalité ici: http://caniuse.com/#feat=x-doc-messaging.
Si vous ne pouvez pas utiliser HTML5 fonctionnalités, alors vous pouvez suivre les astuces décrites ici: http://softwareas.com/cross-domain-communication-with-iframes. Cette entrée de blog également fait un bon travail de définition du problème.
Je viens de contre cette en chrome et la seule chose qui a fonctionné a été le retrait et le remplacement de l'iframe. Exemple:
Assez simple, non couverts dans les autres réponses.
pour la nouvelle url
La méthode assign() charge un nouveau document.
recharger
Le reload() la méthode utilisée pour recharger le document en cours.
Simplement remplacer le
src
attribut de l'élément iframe n'est pas satisfaisant dans mon cas, car on pourrait voir l'ancien contenu jusqu'à ce que la nouvelle page est chargée. Cela fonctionne mieux si vous voulez donner un retour visuel instantané:Un raffinement sur yajra post ... j'aime la pensée, mais déteste l'idée de la détection de navigateur.
Je plutôt prendre ppk de vue de l'utilisation de la détection d'objet à la place de la détection de navigateur,
(http://www.quirksmode.org/js/support.html),
parce que vous êtes réellement tester les fonctionnalités du navigateur et d'agir en conséquence, plutôt que ce que vous pensez que le navigateur est capable de l'époque. Aussi ne nécessite pas tellement laid navigateur chaîne d'ID de l'analyse, et n'exclut pas parfaitement capable navigateurs dont vous ne savez rien à propos de.
Donc, au lieu de regarder navigator.AppName, pourquoi ne pas faire quelque chose comme cela, en fait de tests de dépistage pour les éléments que vous utilisez? (Vous pouvez utiliser try {} blocs si vous voulez l'obtenir, même amateur, mais cela a fonctionné pour moi.)
De cette façon, vous pouvez aller essayer autant de permutations différentes que vous le souhaitez, ou est nécessaire, sans provoquer des erreurs javascript, et de faire quelque chose d'intelligent si tout le reste échoue. C'est un peu plus de travail pour tester vos objets avant de les utiliser, mais, de l'OMI, fait pour le meilleur et le plus fiable de la code.
A travaillé pour moi dans IE8, Firefox 15.0.1), Chrome (21.0.1180.89 m), Opéra (12.0.2) sur Windows.
Je pourrais peut-être faire encore mieux que le fait de test pour la fonction reload, mais c'est assez pour moi. 🙂
Maintenant à faire ce travail sur chrome 66, essayez ceci:
Dans IE8 à l'aide .Net, le réglage de la
iframe.src
pour la première fois, c'est ok,mais le réglage de la
iframe.src
pour la deuxième fois, c'est de ne pas soulever lapage_load
de la iframed page.Pour le résoudre j'ai utilisé
iframe.contentDocument.location.href = "NewUrl.htm"
.Découvrir quand utilisé jQuery thickBox et a essayé de rouvrir la même page dans la thickbox iframe.
Ensuite, il a juste montré à la page précédente qui a été ouvert.
Utilisation de rechargement pour IE et définir src pour les autres navigateurs. (recharge ne fonctionne pas sur FF)
testé sur IE 7,8,9 et Firefox
Si vous utilisez Jquery, il y a une seule ligne de code.
et si vous travaillez avec le même parent alors
Si tous les ci-dessus ne fonctionne pas pour vous:
Ce pour quelque raison rafraîchi mon iframe au lieu de l'ensemble du script. Peut-être parce qu'il est placé dans le cadre lui-même, alors que tous ceux getElemntById solutions de travail lorsque vous essayez d'actualiser une image à partir d'une autre image?
Ou je ne comprends pas entièrement et de parler de charabia, de toute façon cela a fonctionné pour moi comme un charme 🙂
Avez-vous pensé à l'ajout de l'url d'un sens paramètre de chaîne de requête?
Il ne sera pas vu & si vous êtes au courant du paramètre être sûr, il devrait être bon.
À l'aide de
self.location.reload()
recharger l'iframe.HTML:
Si vous avez essayé toutes les autres suggestions, et ne pouvait pas faire de à travailler (comme je ne pouvais pas), voici quelque chose que vous pouvez essayer qui peut être utile.
HTML
JS
J'ai d'abord mis à essayer de sauver un peu de temps avec RWD et de la croix-test du navigateur. J'ai voulu créer une page rapide qui abritait un tas d'iframes, organisés en groupes que je voudrais montrer/masquer à volonté. Logiquement, vous voulez être en mesure de facilement et rapidement actualiser une image donnée.
Je note que le projet sur lequel je travaille actuellement, la seule en usage dans ce banc d'essai, est un site avec des emplacements indexés (par exemple index.html#maison). Qui ont peut-être eu quelque chose à voir avec pourquoi je ne pouvais pas obtenir toutes les autres solutions pour actualiser mon image particulière.
Cela dit, je sais que c'est pas le plus propre chose dans le monde, mais il travaille pour mes fins. Espérons que cela aide quelqu'un. Maintenant, si seulement je pouvais comprendre comment garder l'iframe à partir du défilement de la page parent chaque fois qu'il y a de l'animation à l'intérieur de l'iframe...
EDIT:
J'ai réalisé que ce n'est pas "l'actualisation" de l'iframe, comme je l'avais espéré qu'il le ferait. Il permettra de recharger l'iframe de la source initiale si. Ne peut toujours pas comprendre pourquoi je ne pouvais pas obtenir toutes les autres options de travail..
Mise à JOUR:
La raison pour laquelle je ne pouvais pas obtenir toutes les autres méthodes pour travailler, c'est parce que j'ai été le tester en Chrome et Chrome ne vous permettra pas d'accéder à un contenu de l'iframe (Explication: Il est probable que les futures versions de Chrome soutien contentWindow/contentDocument quand iFrame charge un fichier html local de fichier html local?) si elle ne vient pas du même endroit (donc autant que je le comprends). Après d'autres tests, je ne peux pas accéder contentWindow dans FF soit.
MODIFIÉ JS
Des fins de débogage, on pourrait ouvrir la console de changer le contexte d'exécution de l'image qu'il veut actualisé et ne
document.location.reload()
Une autre solution.
var url = ifr.src; ifr.src = null; ifr.src = url;