Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器特定的延迟重定向_Javascript_Html - Fatal编程技术网

Javascript 浏览器特定的延迟重定向

Javascript 浏览器特定的延迟重定向,javascript,html,Javascript,Html,我一直在寻找这个问题的答案,但我发现的大部分答案要么是真的过时了,要么不是我所需要的。以下是我的设想: 我有一个在webkit浏览器中看起来很棒的网站,但我离在其他浏览器中看起来完美还有几周的时间。我已经在使用CSS和Javascript来识别他们正在使用的浏览器,并加载适当的内容。如果有人从非webkit浏览器访问,他们会看到一条消息,说明网站在他们使用的浏览器中尚未完全就绪。该站点处于活动状态,以下是我需要重定向的操作: 如果有人通过webkit浏览器访问该网站,他们会看到一个简短的介绍。我

我一直在寻找这个问题的答案,但我发现的大部分答案要么是真的过时了,要么不是我所需要的。以下是我的设想:

我有一个在webkit浏览器中看起来很棒的网站,但我离在其他浏览器中看起来完美还有几周的时间。我已经在使用CSS和Javascript来识别他们正在使用的浏览器,并加载适当的内容。如果有人从非webkit浏览器访问,他们会看到一条消息,说明网站在他们使用的浏览器中尚未完全就绪。该站点处于活动状态,以下是我需要重定向的操作:

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


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

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

但是,如果您知道自己在做什么,可以使用与setTimeout()结合使用的方法,如下所示:

setTimeout( function(){ window.location.replace("redirectionpage"); }, 8000 );
或者您可以使用元刷新,这可能更具逻辑性(您可以将其放在Javascript中,如果可以的话,甚至可以放在PHP中,这可能会更好)。比如:

然后,在加载页面时,只需在Javascript中删除它(只需将它放在
中的
标记中,在
之后),如下所示

var webkit_meta = document.getElementById("webkit_meta");
webkit_meta.parentNode.removeChild(webkit_meta);
关于第二种解决方案,它避免了使用
标记,这对于HTML中的某些浏览器来说是无用的。您只需创建一个
meta
标记,设置其属性,然后将其放入

对于webkit测试,您只需执行
if(/webkit/i.test(navigator.userAgent))
(若要测试它是否是webkit浏览器,请添加
(若要测试非webkit浏览器)。再一次,不要忘记信息是不可信的。:)

因此,总而言之,您所要做的就是选择这两种方法中的任何一种,然后根据浏览器的不同放置一个脚本来删除/添加您的
标记

<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>

if(/webkit/i.test(navigator.userAgent))
{
var meta=document.createElement(“meta”);
meta.httpEquiv=“刷新”;
meta.content=“8;URL='redirectionpage';
document.getElementsByTagName(“head”)[0].appendChild(meta);
}


if(!/webkit/i.test(navigator.userAgent))
{
var webkit_meta=document.getElementById(“webkit_meta”);
webkit\u meta.parentNode.removeChild(webkit\u meta);
}
这应该足够了^^
(是的,有很多代码)

从技术上讲,您可以使用
if(/webkit/.test(navigator.userAgent))setTimeout(函数(){window.location.href=“newurl”;},8000);}。但是你真的不应该检测浏览器。在webkit浏览器和非webkit浏览器中,您开发了哪些不同的浏览器?这实际上只是一个临时修复,直到我在非webkit浏览器上获得正确的布局。我使用了很多渐进式CSS,因此webkit呈现某些东西的方式与其他引擎的方式存在一些不一致。一旦我完成了这个CSS,我就不需要检测浏览器了。@Ian Hum我刚刚注意到你的评论:关于它有两件事:1。您忘记了正则表达式后面的i选项,因为它可以是“WebKit”(我知道默认的Chrome用户代理拥有它)。2. 
window.location.replace()
在这种情况下会更好(请参阅)。否则很好。XD@Sk8erOfBodom我想在一段时间前回答这个问题-关于
I
标志,你是对的,我把它放在一起,没有测试,但重点是在正确的轨道上开始操作。另外,在
.replace()
上使用
.href
是特定于这种情况的-他们做两种不同的事情我知道这不是最佳做法,但在我修复其他浏览器上的布局之前,这实际上只是权宜之计。我使用了很多渐进式CSS,但是webkit和其他工具之间有很多不一致之处。元刷新是我以前使用过的,因为它正是我所需要的,但我不确定如何只针对webkit浏览器。我可以使用什么javascript只在webkit中插入meta标记?@LeeH好吧,你可以在其他浏览器上放置meta并删除它,或者做相反的操作,只在webkit浏览器上添加它(第二个更符合逻辑,但不一定更简单)。我将编辑我的答案。我已经消除了重定向的需要,但这实际上很好,因为我想在不同的浏览器上动态插入不同的内容,所以这回答了我的问题。再一次。。。这只是暂时的解决办法。但这很好。谢谢你的帮助。@LeeH很好。不客气。很高兴我还帮助您进一步编码。^^请注意,我添加
的方式应该以相同的方式处理任何标记。如果您必须添加很多内容,那么使用AJAX可能会更好(jQuery提供了一种简单而好的方法)。
var webkit_meta = document.getElementById("webkit_meta");
webkit_meta.parentNode.removeChild(webkit_meta);
var meta = document.createElement("meta");
meta.httpEquiv = "refresh";
meta.content = "8;URL='redirectionpage'";       
document.getElementsByTagName("head")[0].appendChild(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>