Je sais que c'est une question qui fait l'objet de nombreuses discussions, mais je ne comprends pas pourquoi cela ne fonctionne pas pour moi.
Ceci est ma fonction:
function ShowComments(){
alert("fired");
var movieShareId = document.getElementById('movieId');
//alert("found div" + movieShareId.textContent || movieShareId.innerText);
//alert("redirect location: /comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/");
window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";
var newLocation = window.location;
//alert("full location: " + window.location);
}
Si les alertes ne sont pas commentées ou si le bugzilla de mozilla est ouvert, il fonctionne correctement, sinon il ne redirige pas vers l'autre page.
Des idées pourquoi?
Si vous appelez cette fonction via un bouton d'envoi. Cela peut être la raison pour laquelle le navigateur ne redirige pas. Il exécutera le code dans la fonction, puis soumettra la page au lieu de la redirection. Dans ce cas, changez le type tag de votre bouton.
A partir de cette réponse,
window.location.href ne fonctionne pas
il faut juste ajouter
return false;
au bas de votre fonction
Bien que ce soit une question très ancienne, je voudrais y répondre car j’ai fait face au même problème récemment et j’ai trouvé une solution à partir de là -
http://www.codeproject.com/Questions/727493/JavaScript-document-location-href-not-working Solution:
document.location.href = 'Your url',true;
Cela a fonctionné pour moi.
Certaines parenthèses sont manquantes.
Changement
window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";
à
window.location = "/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/";
Aucune priorité n'est donnée au ||
par rapport au +
.
Supprime également tout ce qui suit l'assignation window.location
: ce code n'est pas censé être exécuté lorsque la page change.
Remarque: vous n'avez pas besoin de définir location.href
. Il suffit de définir location
.
window.location.replace
est le meilleur moyen d'émuler une redirection:
function ShowComments(){
var movieShareId = document.getElementById('movieId');
window.location.replace("/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/");
}
Vous trouverez plus d’informations sur les raisons pour lesquelles window.location.replace
est la meilleure redirection javascript ici .
Assurez-vous de ne pas envoyer de '#' à la fin de votre URL. Dans mon cas, cela empêchait window.location.href de fonctionner.
Je vais vous donner une fonction intéressante pour ce problème:
function url_redirect(url){
var X = setTimeout(function(){
window.location.replace(url);
return true;
},300);
if( window.location = url ){
clearTimeout(X);
return true;
} else {
if( window.location.href = url ){
clearTimeout(X);
return true;
}else{
clearTimeout(X);
window.location.replace(url);
return true;
}
}
return false;
};
C'est une solution de travail universelle pour le problème window.location
. Certains navigateurs ont un problème avec window.location.href
et il peut parfois arriver que window.location
échoue. C'est pourquoi nous utilisons également window.location.replace()
pour chaque cas et le délai d'attente pour le "dernier essai".