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内に、直接的または間接的にネストされていません (ただし、関数の境界を越えていません) 。IterationStatementSwitchStatement

  • プログラムにはbreak、オプションの を含むステートメントが含まれていますIdentifier。 whereIdentifierは、囲んでいる (ただし、関数の境界を越えていない) のラベル セットには表示されませんStatement

于 2009-12-15T04:19:37.027 に答える
0

これは単なる副次的な問題ですが、コメントするには大きすぎます。

あなたの正規表現を見ると、そこに何か問題があると思わなければなりません。 すべて.*に一致し、正規表現はデフォルトで貪欲であるため、最初の式は残りの文字列全体に一致し、その部分に一致する機会がなく、強制的に失敗します。一部のエンジンは、あなたの言いたいことを理解するのに十分賢いかもしれませんが、それでも単純化して..*Chrome/Chrome/

于 2009-12-15T04:18:46.047 に答える
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 に答える
0

私だったらこうします

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