元刷新无效?

45

我有一个页面,使用类似以下代码:

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

但是对于某个工作站上的某些用户,这不起作用。这是在IE中发生的。是否存在与cookie有关或者某个设置导致此操作失败的问题?我从未听说过这样的事情。


Greg,你应该展示你标记的上下文。它上面是什么?下面是什么,等等。 - Sampson
也许这是由于无效标记引起的错误,只在特定机器的特定浏览器中出现。 - Gumbo
7个回答

77
问题在于当IE看到这个时:

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

它期望contents属性包含一个数字。只有当content属性包含"URL="时,IE才会检查URL,因此在所有浏览器中最常用的重定向是:

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

上面的例子会立即重定向,但如果你将0更改为其他数字,它将等待那么多秒。希望这一切都说得通,它应该可以正常工作,但我仍然认为我的第一个想法是更好的。

1
哈哈,我也遇到了同样的问题...糟糕的错误是忘记了URL=。谢谢 :-) - Joshua - Pendo
2
如果这个方法对你不起作用,还有一个拼写错误要注意 - 在延迟和URL之间应该使用分号而不是逗号。 - Mikeb

35

在 Internet Explorer 中有一个安全设置,它不允许 meta 标签刷新。它位于“安全”选项卡下,然后选择“自定义级别”,在“杂项”下找到“Meta 标签刷新”选项。如果禁用了该选项,则会停止元刷新的工作。

除了能够选择性地禁用它外,在将 IE 的安全级别设置为“高”时也会自动禁用它[在IE9中观察到]。


非常准确。这正是我的情况下的确切解决方案,因为我正在从 Azure VM 内部访问 IE 进行测试。 - julealgon
这个IE设置(安全级别='高')是一个问题,因为当JavaScript被禁用时,Meta标签刷新经常被引用作为重定向的解决方案,而在安全级别高的情况下也是如此。 - frank

5

这是IE的一个非常旧的版本吗?如果是,尝试以下方法:

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

需要留出空白。HTML编辑器可能会提示错误,但可以忽略。


1
你所说的“really old”是指IE7吗?哈哈,这终于对我起作用了。谢谢! - FarFigNewton

3

2

META标签在HTML中不是空标签,也没有结束标签,只有在XHTML中才有。如果您真的正在发送XHTML,则在旧版本的IE上可能无法正常工作,因为只有通过解决方案才能将XHTML发送到旧版IE版本。

建议尝试:

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

W3学校META标签说明

您可能还可以尝试:

  1. 检查IE的主要和次要版本。您可以在帮助->关于菜单选项中执行此操作。
  2. IE历史上对文件名和MIME类型感到困惑。确保将HTML发送为htm或html扩展名文件,并且这些文件类型在服务器上设置为发送text/html MIME类型。
  3. 确保您的服务器未发送冲突的meta refresh http头。

1

如果有人试图在Facebook应用程序(无论是页面选项卡应用程序还是IFRAME应用程序)中使用meta refresh来重定向到新的URL,Facebook会以某种方式禁用该标记。

解决方法是:

<script>
top.window.location = 'http://example.com';
</script>

记得要以“top”为目标,因为Facebook应用程序在IFRAME中。


0
只是一个猜测:也许那些重定向无法工作的机器上安装了一些广告拦截器。我想不到其他原因,为什么这种常见的技术在你的某些机器上有效,而在其他机器上失败。

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