2013-04-29 100 views
0

我对这个问题的答案看起来相当有点,但是我发现的大部分内容都是真的过时,或者根本不需要做什么。这是我的场景:浏览器特定的延迟时间

我有一个网站,在webkit浏览器看起来不错,但我仍然有几个星期远离它在其他浏览器看起来完美。我已经使用CSS和Javascript来识别他们正在使用的浏览器并加载适当的内容。如果有人从非webkit浏览器访问,他们会看到一条消息,说明该网站在他们正在使用的浏览器中尚未准备好。该网站是活的,这里是我需要重定向去做的:

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

我在想Javascript解决方案最好,但我不太确定该做什么。任何帮助将不胜感激。

+1

从技术上讲,你可以使用'if(/webkit/.test(navigator.userAgent))setTimeout(function(){window.location.href =“new url”;} 8000); }'。但你真的不应该检测浏览器。你在开发什么,在webkit和非webkit浏览器中产生了不同的结果? – Ian 2013-04-29 17:13:45

+0

这实际上只是一个临时修复,直到我在非webkit浏览器上正确设置布局为止。我使用了很多渐进式CSS,因此与webkit呈现某些内容与其他引擎的方式有些不一致。一旦我完成了这个CSS,我就不需要检测浏览器。 – 2013-04-29 18:30:06

+0

@Ian Hum我只是注意到你的评论。 :p 关于它的两件事:1.你在正则表达式后忘了i选项,因为它可以是“WebKit”(我知道默认的Chrome用户代理有它)。 2.'window.location.replace()'在这种情况下会更好(参见[这里](http://stackoverflow.com/questions/503093/how-can-i-make-a-redirect-page-in -jquery的JavaScript))。否则很好。 XD – Sk8erOfBodom 2013-05-02 16:39:12

回答

0

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

如果你知道你在做什么,但是,你可以使用window.location.replace()加上的setTimeout(),这样的:

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

或者你可以使用元刷新,这可能是更多的逻辑(和你可以把它放在Javascript中,如果可以的话,甚至可以用PHP,这可能会更好)。像:

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

这将是很好,如果你可以提供更多的细节,但这应该是足够的。

编辑:如何把元标记取决于浏览器。

所以正如我在评论中所说,有两种解决方案可以添加meta标签。将其添加到HTML中,然后将其删除用于非Webkit浏览器,或者仅在加载页面时将其添加到webkit浏览器。

前者非常简单,您可以将标签置于<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> 

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

+0

我知道这不是最佳做法,但它只是一个权宜之计解决方案,直到我修复这些其他浏览器。我使用了很多渐进式CSS,并且Webkit和其他Web之间存在大量的不一致。元刷新是我之前使用过的,因为它完全符合我的需求,但我不确定如何将其定位到只有webkit浏览器。我只能在webkit中使用什么JavaScript插入元标记? – 2013-04-29 18:26:46

+0

@LeeH好吧,你可以把它放在其他浏览器上,或者做相反的操作,只在webkit浏览器上添加它(第二种更合理,但不一定更简单)。 我会编辑我的答案。 – Sk8erOfBodom 2013-05-02 16:06:20

+0

我已经删除了重定向的需求,但这实际上很棒,因为我想在不同的浏览器上动态插入不同的内容,所以这回答了我的问题。再一次......这只是一个临时性的解决方案。但这很好。谢谢你的帮助。 – 2013-05-02 20:38:40