0

私たちはブックマークレットを作成していますが、サーバー側でエージェントを使用して検出するよりも、クライアント側で JavaScript を使用してブラウザとバージョン番号をより正確に検出できるかどうか疑問に思っています。

メインリクエストのサーバーに検出結果をプッシュします。

問題は、このアプローチがよりうまく機能し、より正確になるかどうかです。または、両方が同じ間違いを犯す可能性があり、JavaScript 自体がユーザー エージェントから計算します (これはプラグイン/プロキシによって変更できます)。

重要

ブックマークレットを作成しているため、Modernizr や JQuery などの高度なツールをロードできないことを忘れないでください。

4

4 に答える 4

2

間違っているかもしれませんが、JSもユーザーエージェントを使っていると思います。これまでのところ、JS ブラウザーがユーザー エージェントから計算しないコードを検出するのを見たことがありません。私が間違っている場合は修正してください。これが役立つ場合は$.support、ブラウザーの名前とバージョンに依存するのではなく、必要な特定の機能の検出/サポートのために JQuery プロパティを試してください。ユーザーエージェントを偽造するのは簡単です。

thisによると、navigatorオブジェクトは user-agent ヘッダーを使用します。

于 2012-06-07T10:21:20.157 に答える
1

なぜユーザーエージェントを検出したいのですか? ユーザー エージェントに応じて異なる JavaScript を実行しますか? JQuery や Mootools は、さまざまなブラウザー JS を処理する抽象化層を提供します。さらに、メディア クエリやその他の API は、ビューポート サイズや解像度などを検出して、コンテンツの適応を容易にします。異なるユーザー エージェントにまったく異なるリソースを提供したい場合は、サーバー側のコンテンツ ネゴシエーションが適しています。この場合、Apache Mobile Filter (WURFL デバイス リポジトリ上に構築) などを使用して、ユーザー エージェント文字列からブラウザーの機能を検出できます。

最後に、ネットワーク/プロキシがリクエストを改ざんしないようにしたい場合は、次の HTTP リクエストとレスポンス ヘッダーで次のディレクティブを使用します。

Cache-Control: no-transform

これは、JQuery を使用して AJAX 要求の前に設定する (または単に XmlHttpRequest オブジェクトで設定する) ことができ、応答用に Apache 構成で設定することもできます。

于 2012-06-07T10:42:35.733 に答える
0

ブラウザを検出するのではなく、代わりに利用可能な機能を検出する必要があります。ただし、統計目的でブラウザを検出する場合や、機能のサポートを正常に報告するブラウザに特定の問題がある場合など、タスク全体がまさにそれに帰着する場合を除きます。本当にサポートしているか、欠陥があります (IE6 の PNG サポートを考えてください)。手でコーディングしたくない場合は、Modernizrなどを使用して機能を検出できます。

それでもブラウザの検出が必要な場合は、サーバーからよりもクライアント側の JS の方が多くの機会があります。サーバーでは、プロキシまたはクライアント自体で削除またはマングルできる User-Agent ヘッダーの分析のみに制限されていましたが、JS では、ユーザー エージェント文字列の検査に加えて、環境または環境内のブラウザー固有のオブジェクトの存在を検出することもできます。実際に使用しているブラウザーを正確に検出するために、いくつかの機能の実装でブラウザー固有の癖を確認してください。ただし、1 つの欠点は、当然のことながら、ユーザーが JS を有効にする必要があることです。

簡単な例として、にアクセスできるかどうかを確認するActiveXObjectと、Internet Explorer を使用していることがわかります。JSON.parse使用可能なネイティブがあるかどうかを確認すると、バージョン 7 が標準モードであるか、古い/互換モードであるかが表示されます。ユーザー エージェント文字列が破損しています。

于 2012-06-07T10:50:55.933 に答える
-1

たぶんこれが役立つかもしれません

<div id="example"></div>

<script type="text/javascript">

txt = "<p>Browser CodeName: " + navigator.appCodeName + "</p>";
txt+= "<p>Browser Name: " + navigator.appName + "</p>";
txt+= "<p>Browser Version: " + navigator.appVersion + "</p>";
txt+= "<p>Cookies Enabled: " + navigator.cookieEnabled + "</p>";
txt+= "<p>Platform: " + navigator.platform + "</p>";
txt+= "<p>User-agent header: " + navigator.userAgent + "</p>";

document.getElementById("example").innerHTML=txt;

</script>

参照: http://www.w3schools.com/js/js_browser.asp

于 2012-06-07T10:20:29.440 に答える