Page 1 sur 1

probleme avec window.opener.location.reload

Posté : 13 juil. 2006, 23:39
par damaskinos
Bonjour tout le monde,

j'ai un problème avec
window.opener.location.reload
. J'ai une page avec un lien qui mène à un popup. Le popup te permet de choisir la langue dans laquelle tu veux que le site soit affiché. Pour ce faire dans mon popup j'utilise ce code

Code : Tout sélectionner

function envoyer(formulaire) { var url = window.opener.location.toString(); var maReg = new RegExp( "[? ]", "gi") ; var resultat = url.split(maReg); if(formulaire.langue[0].checked) { //var maReg = new RegExp( , "gi") ; var resul = url.replace(resultat[1],"langue=english" ); window.opener.location.reload(resul); } if(formulaire.langue[1].checked) { var resul = url.replace(resultat[1],"langue=français" ); window.opener.location.reload(resul); } if(formulaire.langue[2].checked) { var resul = url.replace(resultat[1],"langue=german" ); window.opener.location.reload(resul); } if(formulaire.langue[3].checked) { var resul = url.replace(resultat[1],"langue=italian" ); window.opener.location.reload(resul); } if(formulaire.langue[4].checked) { var resul = url.replace(resultat[1],"langue=spanish" ); window.opener.location.reload(resul); } window.close(); } // envoyer
j'explique : Je prend l'url de la page parent, (ex url: http://monsite.com/blabla.php?langue=la_langue) je sépare l'url et je recupère la partie (langue=la_langue) et je la remplace par (langue=nouvelle langue). Ensuite je reload la page parent avec le nouveau url constituer. Le truc est que ca marche bien sur internet explorer main pas sur firefox. Quelqu'un sait comment faire pour que ca marche sur firefox. La en ce moment il reload la page mais ne prend pas en compte l'url que je passe en parametre dans window.opener.location.reload(resul);

merci de votre aide

Posté : 14 juil. 2006, 15:13
par @rthur
Bonjour,

Essaye

Code : Tout sélectionner

window.opener.location=resul;

Posté : 14 juil. 2006, 20:17
par damaskinos
Merci de ta reponse, j'ai essaye et la ca marche plus ni sur explorer ni sur firefox. Au pire je ne sais pas si quelqu'un aurait une autre idée comment faire ça sans passer par ma méthode?

Posté : 14 juil. 2006, 22:26
par Ryle
La fonction reload() prend un booléen en argument qui indique au navigateur s'il doit forcer le rechargement de la page. Tu ne peux donc pas lui passer une nouvelle url, il faut pour cela changer l'attribut "location" ou "location.href" comme l'a suggéré @rthur.

Essaye éventuellement avec

Code : Tout sélectionner

document.parent.opener.location = resul;
A noter que tu n'est pas obligé de le mettre dans chaque if, mais simplement une fois à la fin :)

Posté : 16 juil. 2006, 01:03
par @rthur
Essaye location=, location.href= et éventuellement en les faisant précéder de ta ligne avec reload() (mais sans paramètres)

Normalement ça devrait marcher parfaitement, je l'ai déjà fait mais je retrouve pas ce morceau de code...

Posté : 17 juil. 2006, 16:42
par damaskinos
Bon j'ai essayé ce que vous m'avez dis et la j'ai un truc bizarre.

Quand j'utilise ce code:

function envoyer(formulaire) {

var url = window.opener.location.toString();
var maReg = new RegExp( "[? ]", "gi") ;
var resultat = url.split(maReg);

if(formulaire.langue[0].checked)
{
	//var maReg = new RegExp( , "gi") ;
	var resul = url.replace(resultat[1],"langue=english");
	window.opener.location = resul;
}
if(formulaire.langue[1].checked)
{	
	var resul = url.replace(resultat[1],"langue=français");
	window.opener.location = resul;
}
if(formulaire.langue[2].checked)
{	
	alert(window.opener.location);
	var resul = url.replace(resultat[1],"langue=german");
	alert(window.opener.location);
	window.opener.location = resul;
}
if(formulaire.langue[3].checked)
{	
	var resul = url.replace(resultat[1],"langue=italian");
	window.opener.location = resul;
}
if(formulaire.langue[4].checked)
{	
	var resul = url.replace(resultat[1],"langue=spanish");
	window.opener.location= resul;
}
	alert(window.opener.location);
	window.opener.location.reload();
	window.close();
}
Ça fonction mais comme vous voyez j'ai des alert pour voir ce qui se passe. Dans les alert l'URL ne change jamais. Mais ma page se reload avec le bon URL.

Quand j'enleve les alert, Là ça ne fonctionne plus. :? je ne comprend pas trop.

Ce code ne fonctionne pas.
function envoyer(formulaire) {

var url = window.opener.location.toString();
var maReg = new RegExp( "[? ]", "gi") ;
var resultat = url.split(maReg);

if(formulaire.langue[0].checked)
{
	//var maReg = new RegExp( , "gi") ;
	var resul = url.replace(resultat[1],"langue=english");
	window.opener.location = resul;
}
if(formulaire.langue[1].checked)
{	
	var resul = url.replace(resultat[1],"langue=français");
	window.opener.location = resul;
}
if(formulaire.langue[2].checked)
{	
	
	var resul = url.replace(resultat[1],"langue=german");
	window.opener.location = resul;
}
if(formulaire.langue[3].checked)
{	
	var resul = url.replace(resultat[1],"langue=italian");
	window.opener.location = resul;
}
if(formulaire.langue[4].checked)
{	
	var resul = url.replace(resultat[1],"langue=spanish");
	window.opener.location= resul;
}
	
	window.opener.location.reload();
	window.close();
}
.
J'ai juste enlevé les alerts.

Posté : 17 juil. 2006, 16:50
par damaskinos
J'ai finalement trouvé, en faisant
window.opener.location = resul;
la page se reload automatiquement. Donc il fallait pas que je rajoute en plus
window.opener.location.reload();
. Un peu bizarre mais bon ça marche. Pour ce que ca peut aider je mets mon code
function envoyer(formulaire) {

var url = window.opener.location.toString();
var maReg = new RegExp( "[? ]", "gi") ;
var resultat = url.split(maReg);

if(formulaire.langue[0].checked)
{
	//var maReg = new RegExp( , "gi") ;
	var resul = url.replace(resultat[1],"langue=english");
	window.opener.location = resul;
}
if(formulaire.langue[1].checked)
{	
	var resul = url.replace(resultat[1],"langue=français");
	window.opener.location = resul;
}
if(formulaire.langue[2].checked)
{	
	
	var resul = url.replace(resultat[1],"langue=german");
	window.opener.location = resul;
}
if(formulaire.langue[3].checked)
{	
	var resul = url.replace(resultat[1],"langue=italian");
	window.opener.location = resul;
}
if(formulaire.langue[4].checked)
{	
	var resul = url.replace(resultat[1],"langue=spanish");
	window.opener.location= resul;
}
	
	
	window.close();
}

Posté : 17 juil. 2006, 16:54
par Ryle
En principe le "window.opener.location = resul; " suffit à rediriger ta page vers l'url "resul", le reload() ne sert à rien si ce n'est à recharger la nouvelle page.

Les alertes ont parfois un effet de temporisation sur le code. Ca m'est déjà arrivé, typiquement quand je soumettais un formulaire depuis une popup et que je la fermais juste après, les données n'étaient pas envoyées et pourtant avec une alerte pour vérifier que tout se passait bien cela fonctionnait..

Essaye dans un premier temps de virer le window.close() voir si tu as toujours le problème ? Au pire tu pourras toujours la refermer au rechargement de la fenêtre parente.
Essaye également d'ajouter un window.opener.focus() avant le close(), normalement ca ne fait rien de plus que de rebasculer l'autre fenêtre au premier plan, mais ça lui fera peut être également réalisé qu'on lui a demandé de changer d'url juste avant ;)