Как отключить кеширование модальных диалогов в IE?

Мы реализовали всплывающее окно как модальный диалог, используя метод IE:

window.showModalDialog('...aspx')

Целью всплывающего окна является веб-страница ASP.Net.

Предположим для следующих шагов, что всплывающее окно никогда не запускалось:

  1. Запустить всплывающее окно.
  2. Обработчик события Page_Load выполняется на стороне сервера.
  3. Закройте всплывающее окно.
  4. Немедленно снова запустите всплывающее окно.
  5. На этот раз обработчик события Page_Load не выполняется.

Понятно, что содержимое всплывающего окна кэшируется, потому что, если на шаге 4 мы очистим временные файлы Интернета, обработчик события Page_Load выполняется во второй раз.

Мы экспериментировали с добавлением следующего текста в заголовок веб-страницы (как рекомендовано несколькими другими источниками), но, похоже, ничего из этого не работает.

<meta http-equiv = "Cache-Control" content = "no-cache" />
<meta http-equiv = "Pragma" content = "no-cache" />
<meta http-equiv = "Expires" content = "-1" />

Мы также видели места, где они используются как обескураженный

Кто-нибудь может помочь?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
9
0
12 895
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

Добавьте переменную строки запроса временной метки к URL-адресу содержимого диалогового окна - количество тиков с 01.01.08 или что-то в этом роде - IE будет рассматривать ее как новую страницу и игнорировать кеш.

Это даст вам несколько экземпляров страницы в кеше IE.

Craig Fisher 27.08.2011 02:46

Дополнительные пояснения или примеры должны быть добавлены, чтобы оправдать этот шаблон над настройками кэшируемости.

CertifiedCrazy 02.04.2014 17:15

@CertifiedCrazy - не стесняйтесь добавлять их; Я уверен, что этот ответ 6-летней давности сейчас немного устарел.

Greg Hurlman 03.05.2014 19:43

Поместите Скрипач между IE и вашим сервером. Затем проверьте, содержит ли ответ на ваш запрос HTTP-заголовок Кэш-контроль. Указывается ли какое-либо значение, кроме без кеша? Если это так, то, возможно, IE предоставит этому заголовку приоритет над вашей директивой http-Equiv.

В противном случае вы должны попытаться заставить сервер отправлять HTTP-заголовок Cache-Control: без кеша. Если IE не уважает это, это ошибка IE. Опыт показывает, что выбрать другое решение менее болезненно, чем настаивать на исправлении ошибки, поэтому в этом случае я бы согласился на совет Грега.

Учитывая, что директивы http-Equiv не работают (и, возможно, не должны использоваться), и, несмотря на то, что, к сожалению, они относятся к категории решений для взлома, я думаю, нам придется пойти с этим (опубликовано Грегом). ..

url = "<Some url with query string>"
var date = new Date();
window.showModalDialog(url + “&” + date.getTime(), ... );

Странно, что нет окончательного способа отключить кеширование в этих модальных диалогах. Я не уверен, считается ли использование модальных диалогов в веб-браузерах "хорошей идеей", но мы знаем по крайней мере о некоторых недостатках и альтернативах, но, к сожалению, не можем использовать их в этом проекте.

Спасибо за ваши предложения.

На самом деле это несколько хакерство, но я думаю, что корень проблемы - ошибка кеширования в IE (я сбился со счета, сколько раз IE что-то кешировал, когда я говорил этого не делать).

Greg Hurlman 02.12.2008 18:19

Одна из странных причуд IE заключается в том, что установка отсутствия кеширования в начале файла, похоже, не работает, но перемещение этого раздела после исходного HTML часто срабатывает. По-прежнему лучше всего отправлять его как HTTP-заголовок, но в большинстве случаев будет работать следующее:

<html>
   <head><title>Blah</title></head>
   <body>Contents</body>
</html>
<html>
   <head>
      <meta http-equiv = "Cache-Control" content = "no-cache" />
      <meta http-equiv = "Pragma" content = "no-cache" />
      <meta http-equiv = "Expires" content = "-1" />
   </head>
</html>

Чтобы очистить кеш, добавьте это при загрузке страницы:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

вы забыли тег для повторной обработки страницы.

<base target = "_top" />

если вы поставите теги ниже, кеш будет очищен:

<meta http-equiv = "Expires" content = "0" />
<meta http-equiv = "Cache-Control" content = "no-cache, must-revalidate" />
<meta http-equiv = "Pragma" content = "no-cache" />
<base target = "_top" />

Сначала я попробовал использовать следующий код.

meta http-equiv = "Cache-Control" content = "no-cache" 
meta http-equiv = "Pragma" content = "no-cache" 
meta http-equiv = "Expires" content = "-1" 

но после этого не было дано никакого решения, я попытался использовать строку запроса с переменной отметки времени, нравиться

vat time = new Date().getTime();

url?queryString&time=time

тогда это работает ....

Спасибо...

Ответ Response.Cache.SetCacheability (HttpCacheability.NoCache); единственный, который корректно работает с IE9. Если вы установите метку времени в строке запроса, вам все равно придется обновить страницу, чтобы получить другой URL. Таким образом, модальный диалог по-прежнему кэшируется до обновления страницы, если вы не используете Response.Cache.SetCacheability (HttpCacheability.NoCache); Использование отметки времени в URL-адресе и Response.Cache.SetCacheability (HttpCacheability.NoCache); было бы лучше, покрыть все базы. В конце концов, мы имеем дело с IE.

Вы также можете попробовать следующий оператор в верхней части вызываемой страницы aspx:

<%@ OutputCache Location = "None" %>

Другие вопросы по теме