2011-12-28 14 views
1

現在使用されているユーザーエージェントを確認する関数を開発しています。
次のコードは単なるプロトタイプであり、最初に読み取る値(この場合はIE)を返します。JavaScript関数が正しい値を返さない

detectDevice = function() { 
    var userAgent = { 
     detect: function() { 
      return navigator.userAgent; 
     }, 
     detectBrowser: function() { 
      var browser = userAgent.detect(); 
      var currentBrowser; 
      return currentBrowser = browser.indexOf('IE') ? "Internet Explore" : browser.indexOf('Mozilla') ? "FireFox" : "UserAgent not recognized!"; 
     }, 
     version: function (identifier) { 
     } 
    }; 

    alert(userAgent.detectBrowser()); 
} 

何が間違っているかわかりません。多分あなたたちはそれを見て、私が間違った方向に向いていることを教えてくれるでしょう。

+2

代わりに '$。browser 'を使ってみましたか?あなたの目的には適していませんか? – fcalderan

+2

上記のコードの問題点は何ですか?また、http://api.jquery.com/jQuery.browser/に興味があるかもしれません - jQueryのソースコードを見て、どうやってそれができるのか見てみましょう。 – Douglas

答えて

6

indexOf一致するものが見つからない場合は-1を返します。一致するものが見つかった場合、返された値は見つかった部分文字列の文字インデックスです。

は、サブストリングが存在するかどうかをチェックするには、使用する必要があります。

browser.indexOf('IE') != -1 
// If a match is found, a non-negative index is returned. So, this also works: 
//..... indexOf('IE') > -1 
// .... indexOf('IE') >= 0 
+0

仕事をしました。ありがとう。私が受け入れることができるまで数分: – diceler

2
return (browser.indexOf('IE') > -1) 
      ? "Internet Explorer" 
      : (browser.indexOf('Mozilla') > -1) 
       ? "FireFox" 
       : "UserAgent not recognized!"; 
+0

私はこの答えをupvoteするつもりはないが、それは正しいにもかかわらず、なぜそれが動作するのか説明していないからです。 – Douglas

0

あなたは、インデックスの値をチェックしていない...

あなたはindexOfのを発見した場合(「IE」 )> = 0はあなたの行になるはずです...