问题
在IE10上发生。 (IE8工作正常。)
我编写了一些JavaScript代码,在20分钟不活动后,将浏览器重定向到另一个URL以指示用户已注销。通常这很好。但是我注意到一个奇怪的情况......如果用户的 Windows计算机在此超时期间被锁定,那么似乎没有任何事情发生。
但是,当我查看浏览器的URL栏时,我可以清楚地看到该URL已经更新到自动注销页面。但是浏览器窗口的整个内容仍然显示旧页面!由于某种原因,浏览器窗口没有重新绘制/刷新。看起来它已经冻结了。
此时......如果我在页面上快速鼠标点击,则浏览器“醒来”并显示新内容。 (似乎只有一次鼠标点击是不够的。你点击的速度越快,“醒来”就越快。)
理论
我最好的猜测是IE10浏览器在计算机锁定时停止重新绘制窗口。但是,我确实认为JavaScript引擎仍然在运行,因为我测试了另一个具有多个JS新Date()时间戳的场景,并且在屏幕最终重新绘制时,每个日期时间都是唯一的,显示它实际发生的时间。
重新创建问题 - 版本1
我注意到这只发生在重定向到公司本地Intranet上的URL时。我不知道为什么会这样......但如果我有URL作为谷歌或雅虎的主页....那么我无法重新创建这个问题。它只是正常工作。让我想知道它是否可能是某种组策略/可信区域/内联网与互联网问题......
<!DOCTYPE HTML>
<html>
<head></head>
<body>
<script>
var url = 'http://IntranetWebApps.OurCompany.com/MyWebApp/Home'; // fails
//url = 'http://www.yahoo.com'; // this 'Internet' site works
//url = 'http://www.google.com'; // this 'Internet' site works
setTimeout(function () {
window.location.href = url;
}, 10000 // wait 10 seconds, then execute redirect
);
</script>
</body>
</html>
问题
有没有人有任何想法如何解决这个问题,以便IE10窗口将始终立即重绘,而不是显示陈旧的内容?
答案 0 :(得分:4)
瞧!
这里真正的问题是,即使IE10窗口内容被合法更新并且应该在计算机被锁定时重新绘制(例如重定向时),它也不会重新绘制。
IE10仅在计算机解锁时发生页面内容更新操作时重新绘制。
下面的JavaScript通过将DIV的内容设置为当前时间(包括秒)来每秒更新页面内容。这意味着如果用户锁定他们的计算机并进行午餐一小时,他们的浏览器页面将超时并在他们离开时重定向到注销页面。当用户回来并解锁他们的计算机时...他们将看到旧的陈旧内容1秒....然后运行的JavaScript强制重新绘制,他们将很快看到注销屏幕的内容。
<h1>Due to inactivity, you were automatically logged out. (Deal with it.)</h1>
<div id="div1" style="background-color: white; color: white;">
</div>
<script>
(function ()
{
var forceRepaint = function ()
{
var myDiv = document.getElementById("div1");
myDiv.innerHTML = new Date().toLocaleTimeString();
};
setInterval(forceRepaint, 1000);
})();
</script>
我确实尝试过设置DIV上的可见性以使其隐藏(而不是设置白色背景和白色文本颜色),但浏览器不会重新绘制。它非常智能地检测是否确实发生了可见的变化。
奖励 - 雅虎/谷歌与我的退出页面
在重定向到Yahoo或Google等外部网站时,我无法创建问题的原因是他们可能运行了一些JavaScript代码,这些代码在加载后确实会更新其页面内容。他们基本上有更多“东西”在继续。而我的原始注销页面非常简单,并且在页面加载时没有执行任何JavaScript代码。