web-dev-qa-db-fra.com

window.location.href ne redirige pas

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?

14
user2235124

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.

30
Jose

A partir de cette réponse, 

window.location.href ne fonctionne pas

il faut juste ajouter 

return false;

au bas de votre fonction

9
Sruit A.Suk

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.

6
komal thakkar

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.

4
Denys Séguret

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 .

3
Eldar

Assurez-vous de ne pas envoyer de '#' à la fin de votre URL. Dans mon cas, cela empêchait window.location.href de fonctionner.

2
Luis Gouveia

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".

0