Почему Chrome не перенаправляет использование метаобновления
В приложении, в котором я работаю, есть пакет PL/SQL, который создает страницу и использует функцию для создания тегов META.
Он создает веб-страницу с тегом META точно так же:
<META HTTP-EQUIV="Refresh" NAME="Refresh" CONTENT="1; URL=PaymentSubmit.html">
Проблема в том, что Chrome не нравится атрибут NAME = "Обновить". Он не перенаправляет страницу, хотя она правильно перенаправляется в IE и Firefox.
Если я удалю атрибут NAME, чтобы он выглядел так, он работает во всех браузерах:
<META HTTP-EQUIV="Refresh" CONTENT="1; URL=PaymentSubmit.html">
Что здесь происходит? Я не могу найти стандарт W3C для перенаправления META, поэтому каждый браузер составляет свои собственные правила? Я не уверен, что он когда-либо работал в Chrome, но так как я никогда не слышал сообщений об ошибках, я полагаю, что он работал в Chrome.
У кого-то есть аналогичная проблема?
благодаря
Ответы
Ответ 1
Если вы проверите wiki w3c, вы можете найти следующую цитату:
Необходимо указать одно из атрибутов имени, http-equiv и charset.
Это означает, что недопустимым html установлено оба атрибута name
и http-equiv
.
Прочитайте этот тест W3C HTML и XHTML Techniques на метаобновление:
Найти все мета элементы в документе. Для каждого мета-элемента проверьте, содержит ли он атрибут http-equiv со значением "refresh" (без учета регистра) и атрибутом контента с числом больше 0, за которым следует "URL = anyURL" (где anyURL обозначает URI, который следует заменить текущую страницу).
Поведение других браузеров не ошибочно, но хром является более строгим.
Более подробная информация о правильном поведении и действительной ссылке - доступна по адресу http://www.w3.org/TR/html5/document-metadata.html#attr-meta-http-equiv-refresh
Ответ 2
Что касается поддержки браузера:
Поддержка обновления <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 (yippee !!)
Вывод:
Итак, мое предложение, было бы использовать мои альтернативы javascript, потому что они не будут заменены.
Но <meta>
refresh <meta>
может быть прекращен в ближайшие годы.
More reading: http://en.wikipedia.org/wiki/Meta_refresh
Ответ 3
Для тегов <META
Microsoft опубликовала конкретные рекомендации:
Руководство по страницам и сайтам для SEO
В частности, для элемента <meta http-equiv="refresh">
Microsoft заявляет следующее:
Переадресация страницы должна содержать как сообщение с новым местоположением страницы, так и достаточное время для чтения пользователями сообщения. Переадресация страницы с периодом тайм-аута менее пяти секунд может привести к более низкому ранжированию поисковой системы.
Чтобы перенаправить страницу, вместо этого используйте переадресацию HTTP. Перенаправление HTTP с большей вероятностью передает полномочия старой страницы на новую страницу.
Лично, вместо <meta
refresh, я бы рекомендовал использовать 301 Redirect. В PHP вы можете сделать, например, следующее:
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.yourdomain.com/newpage");
?>
Этот метод лучше, чем <meta
refresh, потому что обычно перенаправление 301 включает адрес, на который был перемещен ресурс. Веб-браузеры, как правило, автоматически переадресовывают 301 на новое местоположение без необходимости действия пользователя.
Согласно некоторым определениям 301 Redirect
, он даже сохранил старые позиции:
Переадресация 301 должна использоваться всякий раз, когда веб-сайт переносится на новое доменное имя (URL), чтобы поисковые системы быстро меняли свои индексы и, теоретически, сохраняли рейтинг в поисковых системах, который был у сайта в предыдущем домене.
Все это соответствует тому, что многие теневые веб-сайты используют <meta
refresh для открытия нежелательных сайтов (спам/реклама и т.д.). Поэтому я бы пришел к выводу, что метатег обновления не должен использоваться.
Для других метатег, пожалуйста, прочитайте следующее: 18 метатег, которые должны иметь каждая веб-страница.
Имейте в виду, что не все метатеги имеют решающее значение; например, Google говорит, что он не использует метатег ключевых слов в веб-рейтинге.
Но помните: лучше иметь и не нуждаться, чем нуждаться, а не иметь.
Просто не используйте <META refresh
;)