我对这个问题的答案看起来相当多,但我发现的大部分内容要么真的过时,要么不能满足我的需要。这是我的情景:
我有一个在webkit浏览器中看起来很棒的网站,但我还有几周的时间让它在其他浏览器中看起来很完美。我已经使用CSS和Javascript来识别他们正在使用哪个浏览器并加载适当的内容。如果有人从非webkit浏览器访问,他们会看到一条消息,说明该网站在他们使用的浏览器中还没有完全准备好。该网站是实时的,这是我需要重定向的地方:
如果有人在webkit浏览器上访问该网站,他们会看到一个简短的介绍。我想在8秒后自动重定向到网站上的某个页面。如果他们从非webkit浏览器查看该站点,则不应发生此重定向。
我认为Javascript解决方案效果最好,但我不太清楚该怎么做。任何帮助将不胜感激。
答案 0 :(得分:0)
嗯,首先,检测浏览器绝不是一个好主意,部分原因是你必须使用不可信任的User-Agent(因为来自用户的任何东西)。你应该确定你需要这样做。简单地为每个浏览器做不同的事情似乎更简单,但它不是,通常,你不需要这样做(除了在极少数情况下和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测试,您只需执行if ( /webkit/i.test(navigator.userAgent) )
(测试它是否是webkit浏览器,如果要测试非webkit浏览器,请添加!
)。再一次,不要忘记信息不可信任。 :)
因此,总而言之,您所要做的就是选择其中一种方法,然后根据浏览器的不同,添加一个脚本来删除/添加<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>
那应该够了。 ^^ (是很多代码)