我正在尝试运行一个非常简单的浏览器检测脚本,它在Safari和Chrome(在Mac上运行)中执行得很好,但在Firefox中根本不执行。我可以把它归结为最简单的形式,它仍然没有执行:
<script type="text/javascript">
if (navigator.userAgent.match(/^.*Chrome.*$/)) {break;}
else {
location="howdy.html"
}
</script>
这让我困惑了几个小时。有人有想法吗?谢谢!
答案 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;
})();