window.location.href doesn't redirect
Asked Answered
E

11

48

I know this is a question much discussed but I can't figure out why it does not work for me.

This is my function:

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

}

If I have the alerts uncommented or if I have Mozilla's bugzilla open it works fine, otherwise it does not redirect to the other page.

Any ideas why?

Encomium answered 2/4, 2013 at 8:2 Comment(3)
What's the point of ` var newLocation = window.location;` ? No line should be executed after the window.location change.Ossify
How are you calling the function? Are you doing something else at that point that may interfer with the change of location?Guimpe
Does this answer your question? How to prevent mailto event from opening a new tab in browserEngadine
E
94

If you are calling this function through a submit button. This may be the reason why the browser does not redirect. It will run the code in the function and then submit the page instead of redirect. In this case change the type tag of your button.

Enfranchise answered 15/1, 2014 at 9:41 Comment(10)
Thanks. Helped a lot. I had my button 'type' as 'submit'. Changed it to 'reset' and it worked.Enuresis
Exctly, the problem of this sorts, is often due to the click or 'enter'-event bubbeling up, and submitting the form.Antependium
You absolutely made my day. 12h of google and stackoverflow searching for that. Top.Kellie
Interestingly enough, even if my button was not submit, it didn't work cause it was inside a form. I had to move it outside then it worked.Applause
This was my issue for a button that had NO type call out, putting type='button' fixed the issue. Thanks!Goatherd
I was using onclick in a link but wasn't working. Changing link to button worked!Tango
Dude thank you so much, I've been trying to find this for hours!Ceramist
The default behavior of a <button /> if inside a <form /> is always the submit behavior. In order to do front-end manipulations in ReactJs land, using the <button type"button" /> is the solution! Thanks ! See hereTarahtaran
To add here, if you still want to have button[type=submit] and handle the redirection in the form's submit event, you can also call event.preventDefault() in the event handler--setting window.location.href should then properly redirect.Lorikeet
thats totally true, thanks for your solution which let me also understand submit concept and its effectsArching
P
37

From this answer,

window.location.href not working

you just need to add

return false;

at the bottom of your function

Proximity answered 6/12, 2017 at 8:35 Comment(2)
didnt work for meWilkison
Adding this destroyed the redirect.Won
F
9

Some parenthesis are missing.

Change

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

to

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

No priority is given to the || compared to the +.

Remove also everything after the window.location assignation : this code isn't supposed to be executed as the page changes.

Note: you don't need to set location.href. It's enough to just set location.

Fracture answered 2/4, 2013 at 8:7 Comment(1)
@Encomium There are other problems in your page, I think. And the fact you have some code after the location assignment makes me suspect bigger logical problems. Can you build a fiddle showing your issue ?Ossify
P
8

Solution from here: http://www.codeproject.com/Questions/727493/JavaScript-document-location-href-not-working

document.location.href = 'Your url',true;
Presbytery answered 24/8, 2016 at 7:10 Comment(0)
T
6

You can't use window.location.replace or document.location.href or any of your favourite vanilla javascript methods to redirect a page to itself.

So if you're dynamically adding in the redirect path from the back end, or pulling it from a data tag, make sure you do check at some stage for redirects to the current page. It could be as simple as:

if(window.location.href == linkout)
{
    location.reload();
}
else
{
    window.location.href = linkout;
}
Tetratomic answered 27/5, 2019 at 7:56 Comment(0)
M
5

Make sure you're not sending a '#' at the end of your URL. In my case, that was preventing window.location.href from working.

Myrtlemyrvyn answered 15/2, 2018 at 17:37 Comment(2)
yea same here, isn't there any native overcome to the issue?Amortize
Note, the redirect with a hash will work if you are including it before or without any querystring parameters.Saltus
C
4

I'll give you one nice function for this 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;
};

This is universal working solution for the window.location problem. Some browsers go into problem with window.location.href and also sometimes can happen that window.location fail. That's why we also use window.location.replace() for any case and timeout for the "last try".

Contented answered 10/12, 2018 at 13:28 Comment(0)
L
3

window.location.replace is the best way to emulate a redirect:

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

More information about why window.location.replace is the best javascript redirect can be found right here.

Leonoreleonsis answered 2/4, 2013 at 8:7 Comment(1)
The point made in the answer you link to is about the trace in history. I don't see how it's relevant.Ossify
I
2

In my case it is working as expected for all browsers after setting time interval.

setTimeout(function(){document.location.href = "myNextPage.html";},100);
Inextinguishable answered 3/2, 2020 at 14:5 Comment(0)
J
0

window.location.href wasn't working in Android. I cleared cache in Android Chrome and it works fine. Suggest trying this first before getting involved in various coding.

Jadejaded answered 8/1, 2020 at 22:25 Comment(0)
O
0

Go to your api route, make sure you are not missing a response such as

res.status(200).json(data); 
Occipital answered 19/2, 2023 at 3:7 Comment(1)
As it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.Softpedal

© 2022 - 2024 — McMap. All rights reserved.