IE10 JavaScript在计算机锁定时无法重新绘制窗口?

Cle*_*ud8 8 javascript windows internet-explorer repaint internet-explorer-10

问题

在IE10上发生.(IE8工作正常.)

我编写了一些JavaScript代码,在20分钟不活动后,将浏览器重定向到另一个URL以指示用户已注销.通常这很好.但是我注意到一个奇怪的情况......如果用户的Windows计算机在此超时期间被锁定,那么看起来好像什么也没发生.

但是,当我查看浏览器的URL栏时,我可以清楚地看到该URL已经更新到自动注销页面.但是浏览器窗口的整个内容仍然显示旧页面!由于某种原因,浏览器窗口没有重新绘制/刷新.它看起来像是冻结了.

此时......如果我在页面上快速鼠标点击,则浏览器"醒来"并显示新内容.(似乎只有一次鼠标点击是不够的.你点击的速度越快,"唤醒"的速度就越快.)

理论

我最好的猜测是IE10浏览器在计算机锁定时停止重新绘制窗口.但是,我确实认为JavaScript引擎仍在运行,因为我在不同的时间间隔测试了另一个具有多个JS新Date()时间戳的场景,当屏幕最终重新绘制时,每个日期时间都是唯一的,显示实际发生的时间.

重新创建问题 - 版本1

  1. 在IE10中启动下面的JavaScript代码
  2. 在10秒钟之前锁定我的Windows计算机.
  3. 等待10秒钟,然后解锁我的电脑.
  4. 看到IE10窗口无法重绘.

我注意到这只发生在重定向到公司本地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>
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法如何解决这个问题,以便IE10窗口将永远重绘,而不是显示陈旧的内容?

Cle*_*ud8 4

终于找到了一种方法来克服这种可笑的烦恼。我在自动注销登录页面(我在其中重定向用户)添加了一些 JavaScript。此 JavaScript 每秒更新一次页面内容。

瞧!

这里真正的问题是,即使 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>
Run Code Online (Sandbox Code Playgroud)

我确实尝试过仅设置 DIV 的可见性以使其隐藏(而不是设置白色背景和白色文本颜色),但浏览器不会重新绘制。它非常智能地检测是否确实发生了可见的变化。

奖励——雅虎/谷歌与我的注销页面

我在重定向到 Yahoo 或 Google 等外部网站时无法产生问题的原因是,他们可能正在运行一些 JavaScript 代码,这些代码确实会在加载后更新其页面内容。他们本质上还有更多的“事情”发生。而我原来的注销页面非常简单,并且在页面加载时没有执行任何 JavaScript 代码。