0

我已经为这个问题的答案看了很多,但我发现的大部分内容要么真的过时了,要么没有完全满足我的需要。这是我的场景:

我有一个在 webkit 浏览器中看起来很棒的网站,但距离让它在其他浏览器中看起来很完美还有几周的时间。我已经在使用 CSS 和 Javascript 来识别他们正在使用的浏览器并加载适当的内容。如果有人从非 webkit 浏览器访问,他们会看到一条消息,说明该站点在他们使用的浏览器中尚未准备好。该站点已上线,这是我需要重定向执行的操作:

如果有人在 webkit 浏览器上访问该站点,他们会看到一个简短的介绍。我想在 8 秒后自动重定向到网站上的某个页面。如果他们从非 webkit 浏览器查看站点,则不应发生此重定向。

我认为 Javascript 解决方案效果最好,但我不太确定该怎么做。任何帮助将不胜感激。

4

1 回答 1

0

好吧,首先,检测浏览器从来都不是一个好主意,部分原因是您必须使用无法信任的用户代理(作为来自用户的任何东西)。你应该确定你需要这样做。为每个浏览器简单地做不同的事情似乎更简单,但事实并非如此,通常,您不需要这样做(除了在极少数情况下和 IE,因为是的,旧的 IE ......)。

但是,如果您知道自己在做什么,则可以将window.location.replace()其与 setTimeout() 结合使用,如下所示:

setTimeout( function(){ window.location.replace("redirectionpage"); }, 8000 );

或者您可以使用元刷新,这可能更具逻辑性(如果可以的话,您可以将其放入 Javascript 甚至 PHP 中,这可能会更好)。喜欢:

<meta http-equiv="refresh" content="8;URL='redirectionpage'" />

如果您能提供更多详细信息会很好,但这应该足够了。

编辑:如何根据浏览器放置元标记。

所以正如我在评论中所说,添加元标记有两种解决方案。在 HTML 中添加它,然后为非 webkit 浏览器删除它,或者在页面加载时只为 webkits 浏览器添加它。

前者很简单,你把上面的标签放在 中<head>,最好加上一个id(为了方便访问)。例如:

<meta http-equiv="refresh" content="8;URL='redirectionpage'" id="webkit_meta" />

然后只需在页面加载时在 Javascript 中将其删除(只需将其放在, 之后的<script>标记中),类似于<head><meta>

var webkit_meta = document.getElementById("webkit_meta");
webkit_meta.parentNode.removeChild(webkit_meta);

关于第二种解决方案,它避免了<meta>在您的 HTML 中使用对某些浏览器无用的标签。你只需要创建一个meta标签,设置它的属性,然后把它放在<head>.

var meta = document.createElement("meta");
meta.httpEquiv = "refresh";
meta.content = "8;URL='redirectionpage'";       
document.getElementsByTagName("head")[0].appendChild(meta);

对于 webkit 测试,您可以简单地做(测试它是否是 webkit 浏览器,如果要测试非 webkit 浏览if ( /webkit/i.test(navigator.userAgent) )器,请添加 a )。!再一次,不要忘记信息是不可信的。:)

因此,总而言之,您所要做的就是选择其中一种方法,然后<meta>根据浏览器放置一个脚本来删除/添加您的标签。

<script type="text/javascript">
if ( /webkit/i.test(navigator.userAgent) )
{
    var meta = document.createElement("meta");
    meta.httpEquiv = "refresh";
    meta.content = "8;URL='redirectionpage'";       
    document.getElementsByTagName("head")[0].appendChild(meta);
}
</script>

或者

<script type="text/javascript">
if ( !/webkit/i.test(navigator.userAgent) )
{
    var webkit_meta = document.getElementById("webkit_meta");
    webkit_meta.parentNode.removeChild(webkit_meta);
}
</script>

这应该足够了。^^(是的很多代码)

于 2013-04-29T17:48:13.830 回答