Почему 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 ;)