Почему Chrome не перенаправляет с помощью meta refresh

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

Он создает веб-страницу с помощью мета-тегов, например :

 <META HTTP-EQUIV="Refresh" NAME="Refresh" CONTENT="1; URL=PaymentSubmit.html">

проблема в том, что Chrome не нравится атрибут NAME="Refresh". Он не перенаправляет страницу, хотя он правильно перенаправляет в IE и Firefox

Если я удалю атрибут NAME, чтобы он выглядел так, как это работает во всех браузерах :

 <META HTTP-EQUIV="Refresh" CONTENT="1; URL=PaymentSubmit.html">

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

у кого-нибудь есть похожие проблемы ?

спасибо

3 ответов


Если вы проверяете W3C в вики вы можете найти следующую цитату:

необходимо указать ровно один из атрибутов name, http-equiv и charset.

это означает, что это недопустимый html, что оба -name и http-equiv атрибуты устанавливаются.

читать этот тест методов HTML и XHTML W3C на meta refresh:

найти все мета-элементы в документе. Для каждого элемента meta, проверять если он содержит атрибут http-equiv со значением " обновить" (без учета регистра) и атрибут содержимого с числом больше чем 0, за которым следует; 'URL=anyURL' (где anyURL означает URI, который следует заменить текущую страницу).

в behavouir из других браузеров не ошибаюсь, но хром является более строгой.

более подробная информация о правильном behavouir - и действительная ссылка - доступны в http://www.w3.org/TR/html5/document-metadata.html#attr-meta-http-equiv-refresh


что касается поддержки браузера:

поддержка <meta> "обновить" есть даже в IE6

используемый синтаксис:

внутри <head> обновить страницу через 5 секунд:

<meta http-equiv="refresh" content="5">

перенаправить на http://example.com/ через 5 секунд:

<meta http-equiv="refresh" content="5; url=http://example.com/">

перейти на http://example.com/ тут:

<meta http-equiv="refresh" content="0; url=http://example.com/">

если вы планируете поддерживать JavaScript disablers (что я не думаю, что вы должны сделать :)

этого:<noscript><meta http-equiv="refresh" content="0; url=url here"></noscript>

это не является частью стандарта HTTP.

тем не менее, есть альтернативы:

для обновления страницы через 5 секунд выполните следующие действия:

<body onload="javascript:setTimeout(function(){ location.reload(); },5000);">

если вы хотите перенаправить через 5 секунд, сделайте следующее:

<body onload="javascript:setTimeout(function(){ window.location = 'http://example.com';},5000);">

если вы хотите сразу редирект:

<body onload="javascript:window.location='http://example.com'">

но нет никакой альтернативы в JavaScript disablers (Юху!!)

вывод:

Итак, мое предложение-использовать мои альтернативы javascript, потому что они не будет заменен.

но <meta> обновление тегов может быть прекращено в ближайшие годы.

больше чтения:http://en.wikipedia.org/wiki/Meta_refresh


на <META теги, Microsoft опубликовала особые указания:

страница и руководство сайта для SEO

специально для <meta http-equiv="refresh"> элемент, Microsoft заявляет следующее:

переадресация страницы должна обеспечить как сообщение с новым местоположением страницы, так и достаточное время для чтения сообщения. Перенаправление страницы с периодом ожидания меньше пяти секунды!--22--> может привести к снижению рейтинга поисковой системы.

для перенаправления страницы,рассмотрите возможность использования HTTP-перенаправления вместо. Перенаправление HTTP более вероятно для передачи полномочий старой страницы на новую страницу.

лично, вместо <meta обновить тег, я бы рекомендовал вам использовать 301 редирект. В PHP вы можете сделать, например, следующее:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.yourdomain.com/newpage");
?>

этот метод лучше, чем <meta обновить, потому что обычно перенаправление 301 включает адрес, на который был перемещен ресурс. Веб-браузеры обычно следуют за 301 перенаправлением в новое место автоматически, без необходимости действий пользователя.

по данным некоторые определения 301 Redirect, он даже сохранил бы старые позиции:

перенаправление 301 должно использоваться всякий раз, когда веб-сайт перемещается на новое доменное имя (URL), чтобы поисковые системы быстро изменят свои indeces и, теоретически, сохранят рейтинги поисковых систем, которые сайт имел на предыдущем домене.

все это соответствует тому, что многие теневые веб-сайты используют <meta обновить, чтобы открыть нежелательные сайты (спам/ реклама и т. д.). Следовательно, я бы заключил, что метатег обновления должен не использоваться.

для других метатегов, пожалуйста, прочитайте следующее:18 метатегов каждый веб-страница должна иметь.

имейте в виду, что не все мета-теги имеют важное значение, например, Google говорит, что это не использует метатег keywords в веб-рейтинге.

но помните: это лучше иметь, а не нужно, чем нуждаться, а не иметь.

просто не использовать <META refresh ;)