为什么这个脚本不能在Firefox中执行?

时间:2009-12-15 04:13:12

标签: javascript firefox browser-detection

我正在尝试运行一个非常简单的浏览器检测脚本,它在Safari和Chrome(在Mac上运行)中执行得很好,但在Firefox中根本不执行。我可以把它归结为最简单的形式,它仍然没有执行:

<script type="text/javascript">
if (navigator.userAgent.match(/^.*Chrome.*$/)) {break;}
else {
location="howdy.html"
}
</script>

这让我困惑了几个小时。有人有想法吗?谢谢!

5 个答案:

答案 0 :(得分:4)

location="howdy.html"更改为location.href="howdy.html"

而且,停止浏览器嗅探。在JavaScript中进行特征检测,以便在长期内提供更强大的应用程序。

答案 1 :(得分:1)

您在错误的位置使用break语句,我确定您收到语法错误,因为在循环或交换机外使用break是违法的。

ECMA-262规格。参考:

12.8 break声明

<强>语法

BreakStatement

break [no LineTerminator此处] Identifieropt;

<强>语义

如果以下任一情况属实,则程序被视为语法错误

  • 该程序包含一个break语句,没有可选的Identifier,它在IterationStatement或者SwitchStatement内没有直接或间接(但不跨越函数边界)嵌套break

  • 该程序包含Identifier语句,其中包含可选的Identifier,其中Statement未出现在封闭(但不跨越函数边界)的标签集中{{ 1}}。

答案 2 :(得分:0)

这只是一个侧面问题,但对于评论来说太大了。

看着你的正则表达式,我不得不认为那里有些不对劲。 .*匹配所有内容,并且由于默认情况下正则表达式是贪婪的,因此第一个.*将与字符串的其余部分匹配,从而没有机会匹配{{1}分开并强迫失败。有些引擎可能足够聪明,明白你的意思,但我仍然会将其简化为Chrome

答案 3 :(得分:0)

如果我,我会这样做

if(!/Chrome/.test(navigator.userAgent)) 
   location.href="howdy.html";

答案 4 :(得分:0)

我使用此代码标记在多个浏览器上测试代码时记录的错误。

它获取了我在IE,Safari,Firefox,Opera,Chrome上测试的浏览器的浏览器名称和版本。但我称之为navigator.says,因为这就是导航员所说的一切。

navigator.sayswho= (function(){
 var N= navigator.appName, ua= navigator.userAgent, tem;
 var M= ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
 if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
 M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
 return M;
})();