Härom dagen ställdes jag inför problemet att jag behövde Redirecta en sida tillbaka till sig själv, fast med ett ankare. Det fungerade naturligtvis utan problem, utom i Internet Explorer. Efter en del trixande hittade jag en lösning, baserad på javascript.
Jag fixade min redirect så här:
if (Request.Browser.Browser.ToLower() == "ie")
{
Response.Redirect("sida.aspx?hash=mitt_ankare#mitt_ankare");
}
else
{
Response.Redirect("sida.aspx#mitt_ankare");
}
På så vis lägger jag alltså till en QueryString om besökaren använder Internet Explorer. Jag skickar ändå med ankaret, ifall att Microsoft skulle få för sig att fixa buggen i framtiden.
Sedan på klientsidan lägger jag följande javascript:
<!--[if IE]>
<script type="text/javascript">
function getQuerystring(key, default_) {
if (default_ == null) default_ = "";
key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
var qs = regex.exec(window.location.href);
if (qs == null)
return default_;
else
return qs[1];
}
self.location.hash = "#" + getQuerystring("hash");
</script>
<![endif]-->
Det körs alltså endast om besökaren använder Internet Explorer, och hämtar ut QueryStringen "hash" och skickar besökaren till rätt position på sidan.
Ganska enkelt men det krävdes en del letande för att hitta på lösningen. Nu har jag presenterat den här för dig, varsågod.
a6570a82-b86a-4bb7-99a6-a286a673329f|0|.0