0

useragent 文字列で見つかったキーワードを含むキーと値のペアの配列があります。これらのペアをループして、一致する各値を navigator.userAgent 文字列に一致させる必要があります。ブラウザのスニッフィングが嫌われていることは知っていますが、それは私次第ではありません。Ext.each (私はあまり詳しくありません) の代わりに、for ループを使用できます。これは、私が初めてこの問題を解決する方法についての jsfiddle です http://jsfiddle.net/tagZN/83/が、代わりに別の方法でこれを行うように言われました。

<script type="text/javascript"> 

var deviceProfiles = 
[ 
    '{match:Macintosh, name:Mac Desktop}',
    '{match:Windows NT, name:Windows Desktop}',
    '{match:Ubuntu, name:Ubuntu,layout:desktop}',
    '{match:Silk, name:Kindle Fire,layout:tablet}'

];     

var ua = navigator.userAgent;
var re = new RegExp(deviceProfiles.join("|"), "i");    
var identifyDevice = function( ua )
{
    Ext.each(
        deviceProfiles,
        function( profile )
        {
            return ua.match( profile.match ) == nil;
        }

    );
}    

</script>    

また、もともと deviceProfile は次のように与えられました (そして、一致と名前の値を入力するように指示されました):

var deviceProfiles =
[
    { 
        match: 'user agent regular expression here', 
        name: 'name of device here',        
    },

    { 
        match: 'user agent regular expression here', 
        name: 'name of device here'             
    },

    { 
        match: 'user agent regular expression here', 
        name: 'name of device here',            
    }
];​

うまくいかなかったので、上記のように変更しました。これは悪い電話でしたか。与えられたものを解読しようとしています。私も作成しました

var re = new RegExp(deviceProfiles.join("|"), "i");    

まだ使用されていませんが、必要になると思います。ua を、配列 deviceProfiles にキーワードが含まれている場所にコピーして貼り付けた実際のユーザー エージェント文字列に等しく設定することで、これをテストしましたが、まだ運がありません。

どんな助けでも本当に感謝しています。

4

1 に答える 1

0

ブラウザのスニッフィングは、カジュアルな娯楽以外では欠陥のある戦略であることは間違いありません。

コードには多くの問題があります。特に、deviceProfilesがオブジェクトではなく文字列の配列であることが問題です。また、コードはユーザー エージェントの検出を試みてから、プラットフォームを推測しています。実際にはデバイスとは何の関係もありません。たとえば、Windows 以外のラップトップの仮想マシンで IE を実行すると、「Windows デスクトップ」が返されますが、これは完全に間違っています。また、一致しないユーザー エージェント文字列はどうすればよいでしょうか?

携帯電話、ラップトップ、ゲーム機、テレビなどのデバイスには、何千ものブラウザが搭載されています。毎日、より多くのデバイスがインターネットや Web ページにアクセスしています。それらすべてを盗聴できますか?

とにかく、ここにあなたがやろうとしていることをする方法があります:

function getDevice() {
  var deviceProfiles = [ 
      {match: 'Macintosh', name: 'Mac Desktop'},
      {match: 'Windows NT', name: 'Windows Desktop'},
      {match: 'Ubuntu', name: 'Ubuntu', layout:'desktop'},
      {match: 'Silk', name: 'Kindle Fire', layout:'tablet'}
  ];     

  var ua = navigator.userAgent;
  var profile, re;

  for (var i=0, iLen=deviceProfiles.length; i<iLen; i++) {
    profile = deviceProfiles[i];

    if (ua.match(profile.match)) {
      return profile.name;
    }
  }
}

alert(getDevice());
于 2012-08-19T13:03:17.697 に答える