我的页面上有一个脚本处理会话超时,当会话到期时在客户端重定向用户。完整的代码稍微复杂一些,但我已将代码精简为导致我出现问题的原因:
<head runat="server">
<script src="javascript/jquery-1.7.2.min.js" type="text/javascript">
</script>
<script type="text/javascript">
/*
Please see document ready method at the bottom that sets
up this code, calling CheckActivity() at intervals.
*/
var warningInterval, redirectTimeout;
var now = 1;
function TimeoutRedirect() {
window.location.href = "Test2.aspx";
}
//In this example this is a bit of a null op, but in real
//code this will display a warning a minute or so prior to redirect.
//This is required to recreate...
function CheckActivity() {
if (now > 4) {
clearInterval(warningInterval);
redirectTimeout = setTimeout(function () {
TimeoutRedirect(); }, 5000);
}
//Some visual activity for testing purposes.
$("#CheckActivityCount").text(now);
now++;
}
$(document).ready(function () {
warningInterval = setInterval(function () {
CheckActivity(); }, 1000);
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="CheckActivityCount">
</div>
</div>
</form>
</body>
此代码按预期工作,在(大约)十秒后重定向。但是,如果对 CheckActivity 的间隔调用完成后(5 秒后),我锁定我的屏幕,然后在重定向发生后解锁它(再过 5 秒),我的 IE 窗口中的 URL 已转到“test2” .aspx',但窗口似乎已冻结(仍显示第一页)。
这最终会解冻,但需要 10 秒才能到达下一页。
这似乎只发生在 IE(我的机器上的 IE9)中,并且在 chrome 和 firefox(以及奇怪的 IE6)中很好。
(Test2.aspx 是一个非常简单的页面,只包含文本'success'。)
请注意,如果我将重定向从 test.aspx 更改为http://www.google.com/,这似乎不是问题。但是,如果我将 test2.aspx 更改为绝对 URL(唯一的主要区别是这将是 localhost 地址),仍然不起作用。