IE7 - HTTPS IFRAME中的元刷新会导致混合内容警告

时间:2009-04-02 18:50:51

标签: asp.net internet-explorer iframe refresh keep-alive

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

对于许多(但不是全部)Internet Explorer的实例(迄今为止在IE7和IE8 beta上再现 - 但不适用于所有人!)如果你在两个包含这个保持活力的IFRAME的安全页面之间移动,你会得到像这一系列事件:

 0s: load page1.html - includes keepalive.html, schedules a refresh at 15s
 5s: click the page2 link
     load page2.html - includes keepalive.html, schedules a refresh at 20s
15s: refresh of frame on page1 happens; mixed content error box displayed

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

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页的链接。

keepalive.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页后,错误仅在第一次显示。

我正在寻找一种方法来解决这个问题,只需要进行最小程度的改变:保持活着的更好方法是使用control & automatically-refreshing images,我将对未来版本进行调查。我想到的一个可能的解决方法是让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>

2 个答案:

答案 0 :(得分:1)

我在IE 6,7和8(发布版)中尝试过您的测试页,无法重现该问题。

要检查的一些事项:

  • 下载Fiddler并验证META REFRESH请求的网址。确保它实际上是https。另外,对于第1页和第2页,使查询字符串为keepalive.html唯一,这样您就可以验证哪个请求导致显示消息框。
  • 确保所有受影响的浏览器都在同一安全区域中看到该站点(检查底部的状态栏并确保IE的所有实例都说“Internet”或“本地Intranet”)。如果一个区域中的浏览器正在工作但另一个区域中的浏览器不工作,则可以尝试将它们全部放在同一区域中。
  • 启动没有任何附加组件的Internet Explorer(开始&gt;所有程序&gt;附件&gt;系统工具&gt; Internet Explorer(无附加组件))或(开始&gt;运行&gt; iexplore -extoff)。遭受折磨的系统会发生同样的事情吗?这个故事与您的具体问题无关,但几年前我有一个用户的会话(由会话cookie维护)没有在辅助窗口中存活。事实证明,她下载并安装了一个流行的游标附加组件,阻止了两个不同IE窗口之间的cookie共享。故事的重点是,IE加载项有时会导致您不会与加载项关联的奇怪行为。最好通过在No Add-ons模式下尝试来排除它们。
  • 确保所有计算机都运行相同版本的Internet Explorer(帮助&gt;关于Internet Explorer或转至http://update.microsoft.com/
坦率地说,我很担心问题的本质。你说访问页面1设置一个计时器来刷新iframe,然后你离开那个页面,刷新仍然发生在指定的时间,即使你已经离开包含iframe的页面,其中包含iframe META REFRESH。导航离开第1页应该在初始iframe刷新时停止计时器。这就是为什么我认为您应该使用Fiddler(和一个唯一的keepalive.html查询字符串)来验证它是第1页上iframe引起问题的请求。

答案 1 :(得分:0)

尝试使用以https开头的完整网址设置iframe,我过去曾经尝试过这个问题,我认为这是解决方案。