1

我有一个 ASP.NET 应用程序,它通过使用带有刷新标头(或页面中的元刷新标记)的隐藏 IFRAME 来实现保持活动。

对于 Internet Explorer 的许多(但不是全部)实例(迄今为止在 IE7 和 IE8 beta 上重现 - 但不是针对所有人!)如果您在两个都包含此保持活动 IFRAME 的安全页面之间移动,您会得到类似这样的序列事件:

0s:加载 page1.html - 包括 keepalive.html,安排在 15s 刷新
 5s:点击page2链接
     加载 page2.html - 包括 keepalive.html,安排在 20 秒刷新
15s:page1 帧刷新;显示混合内容错误框

此时浏览器中显示错误“此页面包含安全和非安全内容”。

page1.html:

<html><head><title>Page 1</title></head><body>
<h1>This is Page 1</h1>
<p><a href="page2.html">Go to Page 2</a></p>
<iframe src="keepalive.html" width="500" height="200" />
</body></html>

第 2 页是相同的,但显示为第 2 页,并链接到第 1 页,而不是。

保活.html:

<html><head>
<meta http-equiv="refresh" content="15" />
</head><body>
<h2>This is the keep alive</h2>
</body></html>

在我测试过的所有浏览器中,我确保互联网区域有权进行元刷新,并设置为在显示混合内容时提示。我已经阅读了所有建议您需要在 IFRAME 上使用 src="" 标记的页面,否则 IE 会认为它不安全 - 按照设计,它必须具有 src 标记,即保持活动页面的标记。

如果您永远坐在第 1 页上,则 IFRAME 会很好地刷新。该错误仅在您更改到第 2 页后第一次出现。

我正在寻找一种方法以最小的变化来解决这个问题:保持活动的更好方法是使用控件和自动刷新图像,我将在未来的版本中进行研究。我想到的一个可能的解决方法是让 IFRAME 的内容成为服务器的常规 XMLHttpRequest,而不是元刷新。更简单的错误修复会更好。


更新:我已将 Grant Wagner 的答案标记为正确,因为它导致我遇到实际问题:Lenovo Password Manager 插件 CpwmIEBrowserHelper 导致此错误。这巧妙地解释了为什么有些人会看到这个问题而不是其他人 - 我问过的大多数人都有 ThinkPad。禁用扩展程序会使刷新问题消失。

由于我们无法让可能使用该应用程序的每个人都解决此问题,因此我们将使用 javascript 计时器并刷新窗口位置,将 keepalive.html 页面更新为如下所示:

<html><head>
<meta http-equiv="pragma" content="no-cache">
</head><body>
<h2>This is the keep alive</h2>
<script type="text/javascript">

  setTimeout ('ReloadPage()', 15000 );

  function ReloadPage() {
     window.location = window.location;
  }

</script>
</body></html>
4

2 回答 2

1

我在 IE 6、7 和 8(发行版)中尝试了您的测试页面,但无法重现该问题。

需要检查的一些事项:

  • 下载Fiddler并验证 META REFRESH 请求的 URL。确保它是事实上的https。此外,使第 1 页和第 2 页的查询字符串keepalive.html唯一,以便您可以验证是哪个请求导致消息框出现。
  • 确保所有受影响的浏览器都在同一安全区域中看到该站点(检查底部的状态栏并确保所有 IE 实例都显示为“Internet”或“本地 Intranet”)。如果一个区域的浏览器可以正常工作,而另一个区域的浏览器不能工作,您可以尝试将它们全部放在同一个区域中。
  • 在没有任何附加组件的情况下启动 Internet Explorer(开始 > 所有程序 > 附件 > 系统工具 > Internet Explorer(无附加组件))或(开始 > 运行 > iexplore -extoff)。同样的事情发生在受影响的系统上吗?这个故事与您的具体问题无关,但几年前我有一个用户的会话(由会话 cookie 维护)没有在辅助窗口中存活。事实证明,她下载并安装的一个流行的光标插件阻止了两个不同的 IE 窗口之间的 cookie 共享。故事的重点是 IE 附加组件有时会导致您不会与附加组件相关联的奇怪行为。最好通过在无附加组件模式下尝试来排除它们。
  • 确保所有计算机都运行相同版本的 Internet Explorer(帮助 > 关于 Internet Explorer 或访问http://update.microsoft.com/

坦率地说,我担心问题的性质。您是说访问第 1 页设置了一个计时器来刷新 iframe,然后您离开该页面,并且刷新仍然发生在指定时间,即使您已经离开包含 iframe 的页面,其中包含元刷新。离开第 1 页导航应该会在初始 iframe 刷新时停止计时器。这就是为什么我认为你应该使用 Fiddler(和一个唯一的keepalive.html查询字符串)来验证它是来自第 1 页上 iframe 的请求导致了问题。

于 2009-04-02T20:39:36.937 回答
0

尝试使用以 https 开头的完整 URL 设置 iframe,我过去曾遇到过此问题,我认为这是解决方案。

于 2009-04-02T19:00:59.123 回答