0

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

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

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

4

5 回答 5

4

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

而且,停止进行浏览器嗅探。从长远来看,在 JavaScript 中进行特征检测以使应用程序更加健壮。

于 2009-12-15T04:15:51.720 回答
1

break在错误的地方使用了该语句,我确定您遇到了语法错误,因为break在循环或开关之外使用是非法的。

ECMA-262规范。参考:

12.8break声明

句法

BreakStatement

break [LineTerminator这里没有] Identifieropt ;

语义

如果以下任一情况为真,则认为程序在语法上不正确

  • 该程序包含一个break没有可选的语​​句Identifier,该语句不直接或间接(但不跨越函数边界)嵌套在 anIterationStatement或 aSwitchStatement中。

  • 该程序包含一个break带有可选的语​​句Identifier,其中Identifier没有出现在封闭(但不跨越函数边界)的标签集中Statement

于 2009-12-15T04:19:37.027 回答
0

这只是一个附带问题,但它太大了,无法发表评论。

查看您的正则表达式,我不得不认为那里有问题。 .*匹配所有内容,并且由于正则表达式默认情况下是贪婪的,所以第一个.*将匹配整个字符串的其余部分,没有机会匹配该Chrome部分并强制失败。有些引擎可能足够聪明,可以理解您的意思,但我仍会将其简化为/Chrome/.

于 2009-12-15T04:18:46.047 回答
0

如果是我,我会这样做

if(!/Chrome/.test(navigator.userAgent)) 
   location.href="howdy.html";
于 2009-12-15T04:24:52.010 回答
0

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

它为我在 IE、Safari、Firefox、Opera、Chrome 上测试的浏览器获取正确的浏览器名称和版本。但我称它为 navigator.sayswho 因为这就是它的全部——导航器说它是谁。

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;
})();
于 2009-12-15T04:39:45.930 回答