Why does setting [removed].href not stop script execution

后端 未结 3 593
别跟我提以往
别跟我提以往 2021-01-11 18:33

The following code changes the location to www.bing.com regardless of wether redirect is 1 or any other number. If redirect is 1, it logs \"is redirecting\" and then redirec

相关标签:
3条回答
  • 2021-01-11 19:10

    I would say the behaviour is undefined.

    When you set the expected url to window.location.href, the current page will actually be in the dying state. And the result of the code written after that is simply unpredictable.

    0 讨论(0)
  • 2021-01-11 19:14

    You are setting a property, not calling a method, the difference is important:

    window.location.href = "something";
    

    Javascript works asyncronous and event based, that means the browser doesn't check for the window location changing right when you set the property, but some unpredictable time later.

    Sometimes you want exit-events to be triggered or fired when the location changes.

    When you compare this to the HTTP location header, the behaviour is the same. Sometimes you want for example PHP scripts to continue even you send the location change header.

    0 讨论(0)
  • 2021-01-11 19:14

    That's because everything after the if is executed as well, but it looks like there's a difference between Chrome and FF (haven't tested in IE).

    Example code:

    var redirect = 1;
    
    if (redirect == 1) {
        console.log("is redirecting");
        document.location.assign('https://developer.mozilla.org/');
    }
    
    alert('go');
    document.location.assign('https://www.bing.com/');
    

    In Chrome 'go' is alerted, and you're redirected to bing.com. In Firefox, 'go' is alerted, but you're redirected to MDN.

    I think, the best thing to do is to wrap the other stuff in an else.

    0 讨论(0)
提交回复
热议问题