I need to modify the hash, remove it after certain processing takes place so that if the user refreshes they do not cause the process to run again.
This works fine
The problem is that "The hash is coming from else where in the web app via a redirect.". If you use javascript to redirect the url in the client like this:
location.href = 'test1.aspx#testhash'
it will be ok !
So this is the IE bug: When a web app via a redirect, the browser may only see the prev url, so when you modify the location.hash
, the browser sees a url change, so refreshes the page.
@JarneCook seems to be right - it is a bug in IE.
You might be able to just do:
<script type="text/javascript">
window.location.hash = window.location.hash;
</script>
at the top of your page. In normal circumstances, this should be a no-op, but if the user is using IE and has arrived via a redirect, the page will reload before they even notice it has loaded.
We had the same problem.
In our case it consisted of a http URL which was redirected to https by Apache. Since the string after the hash sign is never passed to the server, it got lost.
Here is a cross-browser solutions. Works in IE, Chrome, Safari, and FF (tried with latest versions).
var pos = location.href.indexOf('c=');
location = (pos < 0 ?
location + (location.href.indexOf('?') < 0 ? '?' : '&')
: location.href.substring(0, pos))
+ 'c=' + Math.floor(Math.random()*11) + '#' + comment_id ;
Basically, I leverage query ("?") string to trigger the page reload with hash. What the first line does is it checkes whether there is our "golden" query string (I use "c" variable which stands for "comment"). If there is,
If there is no,
The reason I add a random number after "?" is that after the first reload there is something like "?#comment-10". In this case, the next change to the URL will not reload the page, since browser understands it as an anchor jump instruction.
To force reload, we need to add some random thing to the query so that the new URL is different from the previous.
This solution will work on all browsers and will make sure the reload doesn't break the existing query. The only note is to make sure your "golden" query variable name is unique.
Hope this helps.
If you use javascript to set the hash don't use a "#"
window.location.hash = '#foo'; //IE will reload the page
window.location.hash = 'foo'; //IE will set the hash but will not reload the page
Was facing this issue, As suggested in one of the answers, the issue was only when a 302/301 redirection. Hash change does not reload if the page was not a redirect. I was redirecting using PHP and did not want to use a cookie to stop the redirection.
More over this issue was there in some IE9 browsers as well, tried 5 IE9 browsers, 4 reloaded the page.
Here is a fix added this in head section :
<!--[if lt IE 10]>
<script type="text/javascript">
if(window.location.hash.replace('#','').length > 0
&& window.location.hash.search('stopredirectioninie') == -1)
{
window.location.href = window.location.href+'&stopredirectioninie';
}
</script>
<![endif]-->