У меня есть приложение ASP.NET, которое реализует поддержку активности, используя скрытый IFRAME с заголовком обновления (или мета-тегом обновления на странице).
Для многих - но не для всех - экземпляров Internet Explorer (воспроизведенных до сих пор в бета-версиях IE7 и IE8 - но не для всех!), Если вы перемещаетесь между двумя защищенными страницами, которые содержат этот поддерживающий 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>
Во всех браузерах, в которых я это тестировал, я гарантировал, что в интернет-зоне есть разрешение на мета-обновление и он настроен на запрос при отображении смешанного контента. Я прочитал все страницы, предполагая, что вам нужно иметь тег src = "" на вашем IFRAME, или IE сочтет его небезопасным - по своему замыслу он должен иметь тег src, который является тегом страницы keep-alive.
Если вы сидите на странице 1 вечно, IFRAME прекрасно обновляется. Ошибка отображается только в первый раз после перехода на страницу 2.
Я ищу способ исправить это с минимальными изменениями: лучшим способом поддержания активности будет использование элементов управления и автоматического обновления , которые я буду исследовать для будущих версий. Возможный обходной путь, который я имею в виду, заключается в том, чтобы содержимое IFRAME представляло собой обычный запрос XMLHttpRequest на сервер вместо мета-обновления. Более простое исправление было бы еще лучше.
Обновление: Я пометил ответ Гранта Вагнера как правильный, поскольку он привел меня к реальной проблеме: эта ошибка возникает из-за надстройки 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>