Cle*_*ud8 8 javascript windows internet-explorer repaint internet-explorer-10
问题
在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>
Run Code Online (Sandbox Code Playgroud)
题
有没有人有任何想法如何解决这个问题,以便IE10窗口将永远重绘,而不是显示陈旧的内容?
终于找到了一种方法来克服这种可笑的烦恼。我在自动注销登录页面(我在其中重定向用户)添加了一些 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 代码。
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |