为什么Chrome不使用meta refresh进行重定向

13

我所使用的应用程序有一个PL/SQL包,它创建一个页面并使用函数创建META标签。

它会创建一个具有完全相同META标签的网页:

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

问题在于Chrome不喜欢NAME="Refresh"属性。尽管在IE和Firefox中可以正确重定向页面,但它不会重定向页面。

如果我删除NAME属性,使它看起来像这样,在所有浏览器中都可以正常工作:

问题是Chrome不喜欢NAME="Refresh"属性。它不会重定向页面,虽然在IE和Firefox中可以正常重定向。

如果我删除名称属性,就像这样,在所有浏览器中都可以正常工作:

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

发生了什么?我找不到W3C标准中关于META重定向的内容,所以每个浏览器是否都有自己的规则呢?我不确定它在Chrome上是否曾经起作用,但由于我从未听说过任何错误报告,我认为它曾经在Chrome上运行。

有人遇到类似的问题吗?

谢谢


这里是关于重定向和刷新的W3C措辞:http://www.w3.org/QA/Tips/reback - TylerH
3个回答

14
如果您查看w3c wiki,您可以找到以下引用:

必须指定名称,http-equiv和charset属性中的一个。

这意味着设置了两个属性-namehttp-equiv是无效的html。 阅读关于meta refresh的W3C的HTML和XHTML技术测试

在文档中查找所有meta元素。对于每个meta元素,请检查它是否包含带有值“refresh”(不区分大小写)的http-equiv属性和具有大于0的数字后跟; 'URL = anyURL'的content属性(其中anyURL代表应该替换当前页面的URI)。

其他浏览器的行为并没有错误,但Chrome更加严格。 有关正确行为和有效参考的更多详细信息可在http://www.w3.org/TR/html5/document-metadata.html#attr-meta-http-equiv-refresh上找到。

10

浏览器支持情况:

即使在IE6中,也支持<meta>刷新。

使用的语法是:

放置在<head>内,以在5秒后刷新页面:

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

5秒后重定向至http://example.com/

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

立即重定向至http://example.com/

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

如果您打算支持禁用 JavaScript 的用户(虽然我不认为您应该这样做 :))

请执行以下操作:<noscript><meta http-equiv="refresh" content="0; url=此处放置 URL"></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的用户来说,没有其他选择(耶!)。

结论:

因此,我的建议是使用我的JavaScript替代方法,因为它们将不会被替换。

但是<meta>刷新标签可能会在未来几年中停用。

更多阅读:http://en.wikipedia.org/wiki/Meta_refresh


2
对于 <META 标签,微软已经发布了具体的指南:

面向SEO的页面和站点指南

具体来说,对于 <meta http-equiv="refresh"> 元素,微软如下述:

页面重定向应该提供一个包含新页面位置的消息以及足够的时间让用户阅读该消息。超时时间小于5秒的页面重定向可能会导致搜索引擎排名降低。

为了重定向一个页面,考虑使用HTTP重定向。HTTP重定向更有可能将旧页面的权威性转移给新页面。

个人而言,我建议您使用301 重定向而不是 <meta 刷新标签。在 PHP 中,您可以执行以下操作:
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.yourdomain.com/newpage");
?>

这种方法比<meta刷新更好,因为通常301重定向包括资源已移动到的地址。网页浏览器通常会自动跟随301重定向到新位置,无需用户操作。
根据301重定向某些定义,它甚至可以保留旧位置:
引用: “每当网站移动到新的域名(URL)时,应使用301重定向,以便搜索引擎快速更改其索引,并在理论上保留该站点在先前域中具有的搜索引擎排名。”
所有这些都符合许多不良网站使用<meta刷新打开不想要的网站(垃圾邮件/广告等)的事实。因此,我得出结论,不应使用刷新元标记。
关于其他元标记,请阅读以下内容:每个网页都应该有的18个元标记
请记住,并非所有的元标签都是至关重要的;例如,Google表示它在网页排名中不使用关键字元标签
但请记住:最好有而不需要,而不是需要而没有。
只是不要使用<META refresh ;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接