我有一个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>
答案 0 :(得分:1)
我在IE 6,7和8(发布版)中尝试过您的测试页,无法重现该问题。
要检查的一些事项:
https
。另外,对于第1页和第2页,使查询字符串为keepalive.html
唯一,这样您就可以验证哪个请求导致显示消息框。keepalive.html
查询字符串)来验证它是第1页上iframe引起问题的请求。
答案 1 :(得分:0)
尝试使用以https开头的完整网址设置iframe,我过去曾经尝试过这个问题,我认为这是解决方案。