IE7 - обновление мета внутри HTTPS IFRAME вызывает предупреждение о смешанном контенте - PullRequest
1 голос
/ 02 апреля 2009

У меня есть приложение 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>

Ответы [ 2 ]

1 голос
/ 03 апреля 2009

Я попробовал вашу тестовую страницу в IE 6, 7 и 8 (выпуск) и не смог воспроизвести проблему.

Что нужно проверить:

  • Загрузите Fiddler и проверьте URL, запрашиваемый META REFRESH. Убедитесь, что это на самом деле https. Кроме того, сделайте строку запроса уникальной для keepalive.html для страниц 1 и 2, чтобы вы могли проверить, какой запрос вызывает появление окна сообщения.
  • Убедитесь, что все уязвимые браузеры видят сайт в одной и той же зоне безопасности (проверьте строку состояния внизу и убедитесь, что все экземпляры IE говорят «Интернет» или «Локальная интрасеть»). Если браузеры в одной зоне работают, а в другой - нет, попробуйте установить их в одной зоне.
  • Запустите Internet Explorer без каких-либо надстроек (Пуск> Все программы> Стандартные> Системные инструменты> Internet Explorer (без надстроек)) или (Пуск> Выполнить> iexplore -extoff). Происходит ли то же самое в пораженных системах? Эта история не связана с вашей конкретной проблемой, но пару лет назад у меня был один пользователь, чей сеанс (поддерживаемый файлом cookie сеанса) не сохранился во вторичном окне. Оказалось, что популярная надстройка курсора, которую она загрузила и установила, препятствовала обмену файлами cookie между двумя разными окнами IE. Суть истории в том, что дополнения IE могут иногда вызывать странное поведение, которое вы не ассоциируете с дополнением. Лучше всего исключить их, попробовав в режиме «Без дополнений».
  • Убедитесь, что на всех компьютерах установлена ​​одинаковая сборка Internet Explorer (Справка> Об Internet Explorer или перейдите на http://update.microsoft.com/)

Честно говоря, я обеспокоен характером проблемы. Вы говорите, что посещение страницы 1 устанавливает таймер для обновления iframe, затем вы уходите с этой страницы, и обновление все равно происходит в назначенное время, даже если вы ушли со страницы, содержащей iframe, которая содержит МЕТА ОБНОВЛЕНИЕ. Переход от страницы 1 должен остановить таймер при первоначальном обновлении iframe. Вот почему я думаю, что вы должны использовать Fiddler (и уникальную строку запроса keepalive.html), чтобы убедиться, что это запрос из iframe на странице 1, вызывающий проблему.

0 голосов
/ 02 апреля 2009

Попробуйте установить iframe с полным URL-адресом, начинающимся с https, в прошлом я сталкивался с этим, думаю, что это было решением.

...