wake-up-neo.net

window.location.href leitet nicht um

Ich weiß, dass dies eine viel diskutierte Frage ist, aber ich kann nicht herausfinden, warum es für mich nicht funktioniert.

Das ist meine Funktion:

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);

}

Wenn ich die Benachrichtigungen unkommentiert habe oder wenn Mozillas Bugzilla geöffnet ist, funktioniert das einwandfrei, andernfalls wird nicht auf die andere Seite umgeleitet.

Irgendwelche Ideen warum?

14
user2235124

Wenn Sie diese Funktion über eine Senden-Schaltfläche aufrufen. Dies kann der Grund sein, warum der Browser keine Weiterleitung ausführt. Es wird der Code in der Funktion ausgeführt und dann die Seite übergeben, anstatt umzuleiten. In diesem Fall ändern Sie das Typ-Tag Ihrer Schaltfläche.

30
Jose

Aus dieser Antwort 

window.location.href funktioniert nicht

sie müssen nur hinzufügen 

return false;

am unteren Rand Ihrer Funktion

9
Sruit A.Suk

Obwohl es sich um eine sehr alte Frage handelt, möchte ich antworten, da ich vor kurzem mit demselben Problem konfrontiert war und von hier Lösung erhielt - 

http://www.codeproject.com/Questions/727493/JavaScript-document-location-href-not-working Lösung:

document.location.href = 'Your url',true;

Das hat bei mir funktioniert.

6
komal thakkar

Einige Klammern fehlen.

Veränderung

 window.location.href = "/comments.aspx?id=" + movieShareId.textContent || movieShareId.innerText + "/";

zu

 window.location = "/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/";

Dem || wird keine Priorität gegenüber dem + zugewiesen.

Entfernen Sie auch alles nach der window.location-Zuweisung: Dieser Code soll nicht ausgeführt werden, wenn sich die Seite ändert.

Hinweis: Sie müssen location.href nicht einstellen. Es reicht aus, nur location zu setzen.

4
Denys Séguret

window.location.replace ist der beste Weg, eine Weiterleitung zu emulieren:

function ShowComments(){
    var movieShareId = document.getElementById('movieId');
    window.location.replace("/comments.aspx?id=" + (movieShareId.textContent || movieShareId.innerText) + "/");
}

Weitere Informationen dazu, warum window.location.replace die beste Javascript-Weiterleitung ist, finden Sie hier direkt hier .

3
Eldar

Stellen Sie sicher, dass Sie am Ende Ihrer URL kein "#" senden. In meinem Fall verhinderte dies, dass window.location.href funktioniert.

2
Luis Gouveia

Für den Fall, dass jemand müde und albern war, wie ich es letzte Nacht war, stieß ich auf viele Threads, die sich für die verschiedenen Methoden zur Erlangung einer JavaScript-Umleitung aussprachen, die alle fehlschlugen ...

Sie können nicht window.location.replace Oder document.location.href Oder eine Ihrer bevorzugten Vanilla-Javascript-Methoden verwenden, um eine Seite weiterzuleiten zu sich selbst.

Wenn Sie also den Weiterleitungspfad dynamisch vom Back-End hinzufügen oder von einem Daten-Tag abrufen, müssen Sie zu einem bestimmten Zeitpunkt überprüfen, ob Weiterleitungen zur aktuellen Seite vorhanden sind. Es könnte so einfach sein wie:

if(window.location.href == linkout)
{
    location.reload();
}
else
{
    window.location.href = linkout;
}
1
Paulus

Ich gebe Ihnen eine Nice-Funktion für dieses Problem:

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;
};

Dies ist eine universelle Arbeitslösung für das window.location-Problem. Einige Browser haben Probleme mit window.location.href und es kann auch vorkommen, dass window.location fehlschlägt. Aus diesem Grund verwenden wir auch window.location.replace() für jeden Fall und das Timeout für den "letzten Versuch".