This appears to be a bug with Internet Explorer (tested with 7 and 8).
Changing window.location.hash should not result in a reload, and it is a common JavaScript technique to use the hash for maintaining state.
If you manually load a page and change the hash using JavaScript it will work.
The problem is when you are redirected to the page from a different location (ie: using HTTP header "Location"), then modifying the hash will result in a reload.
To get around this bug you could:
1) If you can control the redirect, you could replace the Location header with some HTML.
<html>
<head>
<meta http-equiv="refresh" content="0; url=__REDIRECT_LOCATION__">
<script>window.location = "__REDIRECT_LOCATION__";</script>
</head>
</html>
2) if not, you could try reloading the page when it is loaded. To prevent a reload loop you may need to set a cookie.
window.location = window.location; // window.location.reload() didn't work.
In pseudo code:
// if is Internet Explorer
// if ( cookie "reloadPerformed" is not set )
// set cookie "reloadPerformed" = "1"
// reload page
// else
// clear cookie "reloadPerformed"
The obviously drawback is that loading the page results in two page request & render, so you'll would want the reload to be one of the first things the page does when it loads.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…