0

この質問の理由

ユーザー エージェント ヘッダーは常に偽造される可能性があるため、ブラウザーの検出が 100% 信頼できるわけではないことは承知していますが、私はこれに悩まされていません。

このトピックには多くの質問がありますが、それらはすべてかなり古いように思われるため、最新の回答を得るには、もう一度この質問をする必要があると感じました.

現在、PHP browscap を使用してサーバー側でブラウザ名とバージョンを検出し、名前とバージョンを javascript 変数に返しています (あまり良い方法ではありません)。これを行う必要がある理由は、サポートされているブラウザーを使用していない訪問者にメッセージを表示するためです。

現在の方法(似たようなもの):

<script type="text/javascript">
    var browser = new Array();
    browser['browser'] = '<?php echo $browser_name; ?>';
    browser['version'] = '<?php echo $browser_version; ?>';
    browser['error'] = '<?php echo $browser_error; ?>';
</script>

browscap は非常に遅くなる可能性があり、PHP から JavaScript 変数に値を渡す必要がなくなるため、このクライアント側で行う方がはるかに優れています。PHPを使用する方が良い方法だと思う場合は、回答に記載してください。これは私の意見です。

質問

したがって、私の質問は非常に簡単です。次のリンクは、ブラウザーの名前とバージョンを確認するための信頼できる方法ですか?

Javascript 検出

これに新しいブラウザを追加する必要があることは承知していますが、これは気にしません。私は、使用されているアルゴリズムが信頼できるかどうかについてもっと心配しています。

前もって感謝します

更新 1

私の言いたいことを理解するには、https://www.icloud.com/を Internet Explorer 7 以下で見てください。ブラウザがサポートされていないというメッセージが表示されます。IE の場合は を使用するだけで簡単に実行できますが<!--[if gt IE...、すべてのブラウザーをテストする必要があります。

4

6 に答える 6

1

これは正しくないようです。Javascript からブラウザ情報を取得できます。そのために JS と PHP コードを混在させる必要はありません。

次のようにして、JavaScript だけでユーザー ブラウザを取得および検出できます。

var userAgent = navigator.userAgent.toLowerCase();
var old = false;

// Internet Explorer 7
if (userAgent.indexOf('msie 7.0b') !== -1) { old = true; }
else if (userAgent.indexOf('msie 7.0') !== -1) { old = true; }

// Internet Explorer 6
else if (userAgent.indexOf('msie 6.1') !== -1) { old = true; }
else if (userAgent.indexOf('msie 6.01') !== -1) { old = true; }
else if (userAgent.indexOf('msie 6.0b') !== -1) { old = true; }
else if (userAgent.indexOf('msie 6.0') !== -1) { old = true; }
...
// Detect any other browser versions you consider old

if(old = true) {
// Show notification and alert users that they are using old browser
}

これは JS を使用して行う方法ですが、HTML を使用してこれを実現することもできます。

<!--[if lte IE 6]>
   // include your .css style or do whatever you want to alert users their browser is old
<![endif]-->

あなたの質問に対する簡単な答えは「はい」です。単純な JavaScript や HTML を使用してユーザー ブラウザーを検出するのは間違っています。ここで PHP と JS コードを混在させる必要はありません。最終的に、PHP と JS の両方が同じ UserAgent 情報を取得します。

于 2012-10-29T12:08:11.377 に答える
1

説明

広範な調査と他の開発者の間での議論の結果、ユーザー エージェントからブラウザーの名前とバージョンを取得するための信頼できる方法がないことは明らかです。これにはいくつかの理由があります。

  1. ブラウザーのユーザー エージェントの形式は、ブラウザーの開発者が変更を希望する場合、いつでも変更できます。これにより、一部のスクリプトが正しく機能しなくなる可能性があります。
  2. ユーザーは自分のユーザー エージェントを偽造して他のブラウザーを模倣することができるため、自分が使用していないブラウザーを使用しているように見えます。

可能な解決策

これらのスクリプトは、ブラウザのアップデートのリリース時にいつでも機能しなくなる可能性があるため、使用しないことを強くお勧めしますが、Javascriptでブラウザ名とバージョンを検出したい場合は、次のスクリプトを使用することをお勧めします。

Javascript 検出

ただし、ブラウザーの詳細を取得するための最も信頼できる方法は、間違いなくbrowscapGary Keith によって提供される方法です。このbrowscapプロジェクトは、ユーザー エージェントから収集された各ブラウザーと OS に関する広範な情報を提供します。実装は非常に簡単で、さらに使いやすくなっています。詳細については、以下をご覧ください。

ゲイリー・キース - ブラウズキャップ

Gary Keithの を使用する場合browscapは、少なくとも毎週更新されるようにする必要があります。

答え

私はこの答えに矛盾していますが、あらゆる種類のスクリプトでブラウザー情報を検出することはお勧めできません。ブラウザー検出の唯一の信頼できる方法は Internet Explorer HTML 条件の方法であり、前述のように、これらは Internet Explorer のみを対象としています。

ブラウザ固有の機能や通知を避け、次のような組み込み機能を利用するようにしてください。

media="only screen and (device-width: 768px)"

<!--[if IE 8]>I am IE 8<![endif]-->
于 2012-10-30T09:07:50.360 に答える
1

この質問には、最新の回答が必要です。最近のクライアント側の検出に最適なオプションはWURFLだと思います。

Useragents に基づくデバイスの更新されたライブラリです。クライアント側の Browscap を考えてみてください。

JS をロードすると、js を要求したデバイスに基づいて JSON が返されます。完全!

<script type="text/javascript" src="//wurfl.io/wurfl.js"></script>

WURFL サーバー側で解析を行うため、js をリモートでロードし、dir ツリーに保存する必要はありません。

超簡単

WURFL.is_mobile

たとえば、モバイルを決定するのに必要なのはそれだけです。

幸運を。

于 2015-08-11T06:24:08.860 に答える
0

yepnopejs IE 検出 (!ie プレフィックス)は、MS 条件付きコメントを利用して機能します

ユーザー エージェント スニッフィングに頼らずに、JavaScript で IE10 より前のバージョンの IE を検出するための短いスニペット。

while (
  div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->'
);
// …

https://github.com/SlexAxton/yepnope.js/blob/master/prefixes/yepnope.ie-prefix.js

yepnope 使用例:

yepnope({
    load: ['normal.js', 'ie6!ie7!ie-patch.js'] // patch for ie6 or ie7 only
});
于 2012-10-29T12:19:26.870 に答える
-1

jQueryで書かれたこの情報に最適なプラグインを使用できます(javascriptなど)

このリンクを見てください:

https://github.com/jquery/plugins.jquery.com

特定の機能がブラウザで利用可能かどうかを判断したり、バグ修正を適用したりする場合は、ブラウザ検出ではなく機能検出を必ず実行してください。

于 2012-10-29T12:11:42.810 に答える