11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Sur une page j'ai une iframe qui fait appel à un site externe, je souhaite grâce à un bouton actualiser le contenu de l'iframe.

Voici le code que j'ai trouvé mais cela ne fonctionne pas:


// Actualiser l'iframe
    $('.refresh').click(function() {
        $('iframe')[0].contentWindow.location.reload(true);
        return false;
    });


Il y a un autre méthode ?

Merci
Modifié par lahrim (22 Feb 2013 - 10:30)
<iframe src="" frameborder="0" width="100%" /></iframe>


Le src est vide car l'url vient d'un champ input
si ce que tu veux faire est bien changer le contenu de ta iframe en cliquant sur un bouton et y mettre la valeur d'un input tu peux t'y prendre comme ca:


<iframe src="" frameborder="1" width="100%" /></iframe>

<input type="text"   id="txtUrl">
<input type="button" id="refresh">

<script>
    $('#refresh').click(function() {
       $('iframe').attr("src", $("#txtUrl").val() );;
    });
</script>


en faisant comme ca, ca fonctionne
Merci beaucoup canvasdev, j'avais pensé à cette option mais avec un petit détail vue qu'il est possible de naviguer dans l'iframe, donc quand avec cette méthode quand je change de page dans l'iframe et que j'actualise l'iframe il actualise le lien qui est dans l'input donc pas au top de revenir en arrière, et en cherchant sur le web je n'est pas trouvé comme en gros avoir la page actuelle de l'iframe dans l'input cela permet de pouvoir réaliser cette méthode.

Pour ça que je me suis basé sur

[0].contentWindow.location.reload(true);


Mais problème de sécurité...

Si il y a une solution pour avoir le lien de l'iframe en cours dans l'input cela fonctionnera.

En tous cas merci cela fait plaisir Smiley biggrin
Impossible de faire ce que tu souhaites => http://www.w3.org/Security/wiki/Same_Origin_Policy , http://dvcs.w3.org/hg/cors/raw-file/tip/Overview.html#cross-origin-request-0

Raison de sécurité, comme tu l'indiques (accès cookie, accès url qui peuvent contenir des donnée confidentiel, rajout de surcouche javascript pour récupérer les données saisie pendant la navigation ...).

Sinon, pour obtenir l'url en cours d'une iFrame c'est :

contentWindow.location.href


(En ciblant l'iFrame bien entendu).

Donc, si ça ne rentre pas en conflit avec la SOP, tu auras quelques chose, sinon, tu auras surement un "undefined" ou "null" ...

Si c'est pour une application vraiment spécifique (pas un site web ...), tu peux passer par des UserScripts pour obtenir cela, mais là, c'est vraiment sortir de l'artillerie vraiment lourde ... Ou utiliser des extensions/paramètre pour navigateur (Genre cette extension pour Firefox)

Ensuite, j'ai une autre question, pour quel intérêt cherche tu as affiché le contenu d'un autre site?
Modifié par Super_baloo8 (24 Feb 2013 - 23:04)
oki lahrim jcomprends mieux ton message initial

même question que Super_baloo8

tu veux faire un navigateur dans un navigateur? Smiley biggrin
Merci pour les réponses.

On peu dire un navigateur dans un navigateur Smiley lol

Depuis que je fait du responsive, je réalise un petit outil pour faire des testes du site web rapidement.

Le site comme ça il y a une idée le pourquoi de mes questions :

http://cerizebleu.com

J'essaie de faire évoluer l'outil pour qu'il soit le plus complet, avec pleins d'autres a venir, mais la partie actualiser est très difficile vue les problèmes de sécurité(s)

Et vrai que si je pouvais avoir l'input comme une barre d'adresse navigateur qui touche l'iframe la le top mais la encore problème de sécurité donc dur d'avancer
Modifié par lahrim (24 Feb 2013 - 23:42)
Je n'ai pas bien compris quel était le problème de sécurité, quoiqu'il en soit, ceci marche:
<iframe id="iframe" src="http://www.apple.com/fr/"></iframe>
<input value="Recharger" type="button" onclick="IframeRefresh('iframe');"/>
<script language="javascript">
	function IframeRefresh(IframeId) {
		var iframe=document.getElementById(IframeId);
		iframe.src=iframe.src;
	}
</script>
En faite je n'utilise pas d'input type bouton pour recharger mon iframe mais un li avec un text
<li>recharche</li>

donc le onclick ne fonctionne pas...

Mais je pense que le mieux pour pas trop perdre de temps dessus est d'utiliser l'input type bouton, mais si je peu éviter!
Modifié par lahrim (25 Feb 2013 - 13:24)
lahrim voulait que ca recharge la page sur laquelle on est si on a surfé dans la iframe,
la ca recharge toujours la page initiale (le src de la iframe tel qu'il était avant qu'on navigue sur le site qui est dans l'iframe, le site du conteneur ne peut pas connaitre l'url active dans l'iframe)
en faisant iframe.src=iframe.src ca retourne le src du dom de la page de l'iframe
Modifié par canvasdev (25 Feb 2013 - 20:10)
En utilisent

contentWindow.location.href


mais cela ne fonctionne pas car je pense qu'il faut cette fois de l'ajax, vue que l'input qui doit avoir l'url de l'iframe en temps réelle, ce qui est très difficile pour moi je l'avoue, un domaine que je ne connais pas trop.

Je pense que le projet va être long ^^
Non, ça ne fonctionnera pas non plus, tu rentres en contradiction avec la SOP, donc tu n'auras aucun résultat (sécurité des navigateurs).

Ca fonctionnerait si tu avais un contrôle sur le site que tu inclus dans ton iFrame, il suffirait d'autoriser les requête Cross-Domain pour le domaine qui l'appelle, voir le système CORS pour comprendre la mécanique.

Donc si tu n'as pas de contrôle sur la source de ton iFrame, c'est impossible.

Je suis actuellement sur un projet en cross-domain (pour automatiser des actions, et générer un rapport automatique).

Je n'ai bien entendu pas accès en modification à la source de l'iFrame que j'inclus pour analyser le contenu.

Comme j'ai la possibilité de proposer un exécutable pour faire cet action, je passe par un Firefox Portable, et Firefox dispose d'une extension permettant d'ajouter automatiquement sur chaque requête HTTP les CORS pour permettre le Cross-Domain.

Mais voilà, pas de solution pour "monsieur tout le monde", ou tout du moins je n'en connais pas, et si y'en a une, je suis preneur ! (Ca fait un bon petit moment que je scrupte pour trouver cette solution miracle)

Il existe bien des solutions pour passer des objets javacripts en Cross-Domain (JSONP, PostMessage) ... mais ce sont seulement des objets, et il faut que le domaine demandé retourne bien le bon formalisme d'objet.
Modifié par Super_baloo8 (02 Mar 2013 - 12:59)
Bonjour,

Je cherche a recharger 1 seule fois une Iframe car avec iexplorer et win8, mon iframe n apparait pas, par contre si on actualise le cadre, ca marche. Je cherche donc à ce que ce soit actualisé 1 seule fois. Est possible svp ?

Ceci concerne mon slider en haut sous le logo : www.forum.alliancepokerpass.com

Il en est de meme avec un widget, qui marche avec tous les navigateurs sauf avec le dernier iexplorer sous win8, le widget de colonne de gauche sous le calendrier dénommé : " Fil d' Actualités " celui-ci aussi avec une iframe, n' apparait pas sous iexplorer dans win8 alors que partout ailleurs c est impec.

J' ai mis un code qui recharge mon slider du haut toutes les 13 secondes, mais je voudrai juste que celui-ci soit rechargé ou actualisé 1 seule fois, à moins qu il existe un hack ou autre code a modif pour que cela apparaisse direct comme avec les autres navigateurs... Je ne sais comment faire, j' aimerai que cela s' affiche svp.

Vraiment relou iexplorer, mes arrondis de widgets ou catégories ne ont pas pris en compte dans celui-ci non plus ( comparez avec chrome ou fire ) C' est tout carré, et ma banniere défilante perso sous la radio à droite du forum colonne de droite, la aussi ca ne fonctionne pas, pas de défilement sous ce satané iexplorer... Grrr Avec les anciennes versions de iexplirer tout marchait bien.

J' espere que vous aurez possibilité de m' aider. En tout cas j' apprend en parcourant votre site, bravo...

Cordialement.

Patrice.
Modifié par Patrice85 (25 Jun 2013 - 04:04)