IE больше не оценивает мета-обновление после нажатия клавиши F5

#html #internet-explorer #refresh

#HTML #internet-explorer #обновить

Вопрос:

До смешного простой HTML-файл:

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="refresh" content="5; URL=./test.html">
  </head>
  <body>
    <h1>Hello World</h1>
  </body>
</html>
  

Когда я открываю файл с помощью любого браузера, браузеры работают нормально и перезагружают страницу каждые 5 секунд.

Но когда я обновляю страницу вручную между двумя обновлениями (F5), IE (версия 8.0.6001.18702) больше не оценивает meta тег, и страница больше не обновляется. Opera, FF и Safari по-прежнему работают должным образом и обновляются каждые 5 секунд.

Кто-нибудь еще сталкивался с подобной проблемой? Как (помимо использования Javascript, конечно) можно решить эту проблему?


Редактировать 1:
Проверил это поведение также на IE6, так что я предполагаю, что это общая проблема IE. Есть какие-либо подсказки, как это преодолеть?


Редактировать 2:
Чтобы продолжить эту тему:

  • это известная проблема или стоило бы куда-нибудь отправить сообщение об ошибке (куда?)?
  • Может ли кто-нибудь проверить это поведение с IE7 и / или IE9?

Комментарии:

1. Вообще говоря, органы по стандартизации неодобрительно относятся к использованию нестандартного МЕТА-ОБНОВЛЕНИЯ. Сказав это, вы пробовали использовать полный URL вместо относительного URL? Если вы пытаетесь перезагружать одну и ту же страницу снова и снова, вы пытались полностью опустить URL?

2. @EricLaw: сделайте это ответом, и я проверю его! Пропуск URL действительно решает проблему!

Ответ №1:

В IE 9 это работает нормально.

PS вы пропустили несколько кавычек, должно быть:

 <meta http-equiv="refresh" content="5;" URL="./test.html">
  

Комментарии:

1. <meta http-equiv="refresh" content="5;" URL="./test.html"> у меня работает. Я склонен принять ваш ответ (и назначить награду), потому что этот вариант также обещает сработать, если у меня будет другой URL для перезагрузки (что нельзя использовать при получении ответа Эрика)

2. «Обещает работать» означает «Не работает, но выглядит так, как будто это будет»?

3. @EricLaw: Работает, когда я пробую это локально, необходимо проверить его поведение при загрузке страницы через веб-сервер. Ваш ответ работает, но я не могу указать URL для перезагрузки. В моей реальной настройке я вызываю другой URL, который перенаправляет меня на страницу, где <meta http-equiv=... предоставляется.

Ответ №2:

Насколько я знаю, есть только способ mta или javascript.

Другим вариантом может быть использование

 header("Location: url");
  

если вы можете использовать php, это не совсем обычное обновление, но вы могли бы использовать для повторного перенаправления на ту же страницу

Как и в случае с мета-способом, вы пытались ввести полный URL? (IE, arrg )

Комментарии:

1. AFAIK, недостатком header("Location: url"); является то, что вы не можете указать время ожидания…

2. Я забыл, что header( "refresh:5;url=url"); никогда не подтверждалось, но я слышал, что это реагирует так же, как ваша проблема с IE 8

Ответ №3:

Вообще говоря, органы по стандартизации неодобрительно относятся к использованию нестандартного МЕТА-ОБНОВЛЕНИЯ. Сказав это, вы пробовали использовать полный URL вместо относительного URL? Если вы пытаетесь перезагружать одну и ту же страницу снова и снова, вы пытались полностью опустить URL?

Ответ №4:

Используйте это, я подозреваю, что ваш URL настроен неправильно

 <html>
<head>
<meta http-equiv="refresh" content="1">
</head>
<body>
</body>
</html>
  

Это всегда обновляется само по себе.

Надеюсь, это поможет 🙂

Ответ №5:

Javascript будет вашим другом в этом… в конечном итоге он работает намного лучше в большинстве браузеров. Кроме того, meta-refresh это выходит из моды.

Следующий скрипт и onload атрибут body будут непрерывно обновлять страницу каждые 5 секунд.

 <html>
<head>
   <script>
    function timedRefresh(timeoutPeriod) {
       setTimeout("location.reload(true);",timeoutPeriod);
    }
   </script>
   <noscript>
    <meta http-equiv="refresh" content="5" />
   </noscript>
</head>
<body onload="javascript:timedRefresh(5000)">
   <!-- Content -->
</body>
</html>
  

Комментарии:

1. @Isaac: Я написал в своем вопросе, что javascript не является опцией. -1.

2. Да, ну, я боюсь, что тогда вы застрянете. Meta-refresh устаревает, и его поведение неустойчиво в зависимости от браузера. Я бы посоветовал действительно попытаться заставить Javascript работать. В противном случае у вас нет никаких опций.

3. @Crossdiver: для наших веб-страниц обязательным требованием является то, что они должны работать, когда JS отключен. Поэтому я должен предоставить решение, отличное от javascript.

4. @eckes — ОК, я просто добавил некоторый код, который используется на ESPN.com для обновления их устаревшего браузера. Этот код будет лучше всего работать в браузере JS, но имеет запасной вариант для устаревших браузеров. (-1) ( 1) = 0?

5. @Crossdiver: Мета-обновление не устарело. Это неверная информация. Единственное, что говорит W3, это то, что не рекомендуется автоматически обновлять страницы, потому что это может дезориентировать некоторых пользователей. w3.org/TR/WCAG10-CORE-TECHS/#auto-page-refresh