سؤال

ما هو أفضل / أبسط / أدق وسيلة للكشف عن المتصفح من مستخدم ؟

سهولة extendability وتنفيذ هو زائد.

أقل التقنيات المستخدمة أفضل.

الحل يمكن أن يكون الملقم العميل ، أو كليهما.النتائج يجب في نهاية المطاف في الخادم ، على الرغم من.

الحل يمكن أن يكون إطار الملحد.

الحل لن تستخدم إلا لأغراض إعداد التقارير.

هل كانت مفيدة؟

المحلول

على ملقم كنت محدودة إلى حد كبير من سلسلة وكيل المستخدم المتصفح يوفر (وهو أمر محفوف مشاكل ، قرأت عن وكيل المستخدم سلسلة تاريخ).

على العميل (أي في جافا سكريبت), لديك المزيد من الخيارات.ولكن الخيار الأفضل هو في الواقع لا تقلق على العمل بها المتصفح الذي هو عليه.ببساطة تأكد من كل ما الميزة التي تريد استخدامها موجودة فعلا.

على سبيل المثال, قد تحتاج إلى استخدام setCapture فقط MSIE تنص على ما يلي:

if (element.setCapture) element.setCapture()

بدلا من العمل ما المتصفح ثم استنتاج قدراته, نحن ببساطة رؤية إذا كان يدعم شيء قبل استخدامه - من يدري ما سوف المتصفحات تدعم ما في المستقبل, هل تريد حقا أن تضطر إلى العودة تحديث البرامج النصية الخاصة بك إذا سفاري تقرر دعم setCapture?

نصائح أخرى

على متصفح البرنامج المساعد مسج وسوف نفعل ذلك من جانب العميل لك.

ما هو مسج متصفح البرنامج المساعد ؟

مسج متصفح البرنامج المساعد هو الملحق مسج الذي يجعل من السهل تحديد فريد زوارك المتصفحات.

ماذا يفعل ؟

يعطيك كائن في جافا سكريبت الذي يحتوي على كافة المعلومات عن المتصفح المستخدمة.كما يضيف CSS المتصفح محددات ، مما يعني أنه يمكنك عناصر النمط أو كتابة وظائف محددة المتصفحات, إصدارات المتصفح, تصاميم, تصميم الإصدارات ، وحتى أنظمة التشغيل.صورة مسج متصفح البرنامج المساعد في العمل.

المكونات يجعل $.browser المتاحة التي يمكنك إعادة تقديم إلى الخادم الخاص بك عن طريق اياكس الاتصال, إذا كنت حقا في حاجة إليها من جانب الخادم.

alert($.browser.name);  // Alerts Firefox for me

في المكونات سوف تكون فعالة مثل المتصفحات إنه تم اختبارها ضد ذلك.البرنامج المساعد المذكورة أعلاه لديه قائمة من المتصفحات معترف بها في الاختبارات, ولكن هناك دائما خطر أن المتصفح الجديد سوف يأتي التسلل (جوجل كروم..) من شأنها أن تتطلب إعادة كتابة قواعد الاعتراف.وقال أن هذه المكونات يبدو أن تحديثها بانتظام.

عند استخدام جافا سكريبت: لا تستخدم متصفح الكشف عن

كتابة التعليمات البرمجية التي الاختبارات نفسها بالنظر إلى الحالات التي أظهرتها المتصفحات, وإلا سوف يكون ببساطة بكتابة شفرة صغيرة جدا من السكان.من الأفضل استخدام "typeof foo == 'undefined'" و المتصفح الحيل محددة حيث كنت في حاجة إليها.

مسج يفعل كل هذا على تعليمات البرمجة الأساسية ( إذا نظرتم الى رمز سترى تنفيذ السلوكيات المختلفة المتصفح tecnologies )

أفضل على المدى الطويل.

منذ أنا مجرد نشر هذا في (الآن-حذف السؤال) وانها لا تزال في لصق العازلة, أنا فقط بعد ثانية.ملاحظة:هذا من جانب الخادم PHP الحل

أنا حاليا استخدم التعليمات البرمجية التالية لهذه.انها ليست ما يقرب من مرهق الحل ، ولكن ينبغي أن يكون من السهل لتنفيذ المزيد من برامج التصفح.لم أكن أعرف عن user-agents.org (شكرا PConroy) "واحد من هذه الأيام" سأكون حلقة من خلال ذلك نرى ما اذا كان يمكنني تحديث وإضافة إلى قائمتي.

define("BROWSER_OPERA","Opera");
define("BROWSER_IE","IE");
define("BROWSER_OMNIWEB","Omniweb");
define("BROWSER_KONQUEROR","Konqueror");
define("BROWSER_SAFARI","Safari");
define("BROWSER_MOZILLA","Mozilla");
define("BROWSER_OTHER","other");

$aBrowsers = array
(
  array("regexp" => "@Opera(/| )([0-9].[0-9]{1,2})@", "browser" => BROWSER_OPERA, "index" => 2),
  array("regexp" => "@MSIE ([0-9].[0-9]{1,2})@", "browser" => BROWSER_IE, "index" => 1),
  array("regexp" => "@OmniWeb/([0-9].[0-9]{1,2})@", "browser" => BROWSER_OMNIWEB, "index" => 1),
  array("regexp" => "@(Konqueror/)(.*)(;)@", "browser" => BROWSER_KONQUEROR, "index" => 2),
  array("regexp" => "@Safari/([0-9]*)@", "browser" => BROWSER_SAFARI, "index" => 1),
  array("regexp" => "@Mozilla/([0-9].[0-9]{1,2})@", "browser" => BROWSER_MOZILLA, "index" => 1)
);

foreach($aBrowsers as $aBrowser)
{
  if (preg_match($aBrowser["regexp"], $_SERVER["HTTP_USER_AGENT"], $aBrowserVersion))
  {
    define("BROWSER_AGENT",$aBrowser["browser"]);
    define("BROWSER_VERSION",$aBrowserVersion[$aBrowser["index"]]);
    break;
  }
}

كما قال دان:ذلك يعتمد على التكنولوجيا المستخدمة.

PHP الخادم الجانب المتصفح الكشف أوصي هارالد الأمل متصفح الكشف عن:

http://techpatterns.com/downloads/php_browser_detection.php

نشرت تحت GPL.

لا تستخدم متصفح الكشف عن:

  • الكشف عن المتصفح ليست 100% موثوق بها في أفضل الأوقات ، ولكن الأمور أسوأ من هذا:
  • هناك الكثير من أنواع من المتصفحات (MSIE تخصيصات الخ)
  • المتصفحات يمكن أن يكذب عن هويتهم (أوبرا في الواقع هذه الميزة مدمجة)
  • بوابات إخفاء أو التعتيم على هوية المتصفح
  • وتخصيص بوابة البائعين الكتابة الخاصة بهم القمامة في USER_AGENT

فمن الأفضل أن تفعل ميزة الكشف عن العميل في البرنامج النصي.كنت آمل فقط تحتاج متصفح الكشف عن للتغلب على الخلل في معين المتصفح وإصداره.

أنا أصلا سألت السؤال لأنني أريد أن تكون قادرة على تسجيل المتصفحات و نظم عمليات الناس استخدام للوصول إلى الموقع.نعم ، سلسلة عامل المستخدم لا يمكن الوثوق به ، نعم ، لا يجب استخدام متصفح الكشف لتحديد ما بتشغيل التعليمات البرمجية في JS, ولكن أود أن يكون دقيقا قدر الإمكان الإحصاءات.

فعلت التالية.

أنا باستخدام مزيج من جافا سكريبت و PHP لتسجيل الإحصائيات.جافا سكريبت لتحديد ما المتصفح و نظام التشغيل (مثل هذا ربما الأكثر دقة) و PHP لتسجيل ذلك:

جافا سكريبت يأتي من Quirksmode, PHP النفس بدلا من ذلك واضح.يمكنني استخدام MooTools شبيبة الإطار.

إضافة التالية إلى BrowserDetect النصي:

window.addEvent('domready', function() {
    if (BrowserDetect) {
        var q_data = 'ajax=true&browser=' + BrowserDetect.browser + '&version=' + BrowserDetect.version + '&os=' + BrowserDetect.OS;
        var query = 'record_browser.php'
        var req = new Request.JSON({url: query, onComplete: setSelectWithJSON, data: q_data}).post();
    }
});

يحدد هذا المتصفح, نسخة المتصفح ونظام التشغيل المستخدم المتصفح ، ويرسله إلى record_browser.php البرنامج النصي.على record_browser.php النصي فقط إضافة المعلومات ، جنبا إلى جنب مع PHP session_id الحالي user_id, ، إذا كان موجودا.

الجدول الخلية:

CREATE TABLE `browser_detects` (
  `id` int(11) NOT NULL auto_increment,
  `session` varchar(255) NOT NULL default '',
  `user_id` int(11) NOT NULL default '0',
  `browser` varchar(255) NOT NULL default '',
  `version` varchar(255) NOT NULL default '',
  `os` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `sessionUnique` (`session`)
)

كود PHP:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $session = session_id();
    $user_id = isset($user_id) ? $user_id ? 0;
    $browser = isset($_POST['browser']) ? $_POST['browser'] ? '';
    $version = isset($_POST['version']) ? $_POST['version'] ? '';
    $os = isset($_POST['os']) ? $_POST['os'] ? '';
    $q = $conn->prepare('INSERT INTO browser_detects (`session`, `user`, `browser`, `version`, `os`) VALUES (:session :user, :browser, :version, :os)');
    $q->execute(array(
                    ':session' => $session,
                    ':user' => $user_id,
                    ':browser' => $browser,
                    ':version' => $version,
                    ':os' => $os
                ));
}

كما ذكر العديد من المتصفح الكشف يمكن أن تسوء جدا...ومع ذلك في مصلحة رمز الغولف.

هذا هو وسيلة سريعة جدا للكشف عن أي.

<script>
  if('\v'=='v'){
    alert('I am IE');
  } else {
    alert('NOT IE');
  }
</script>

لها أنيق جدا في الواقع لأنه يختار من أي من دون التعثر في الأوبرا.

نقاط المكافأة إذا كنت تعرف لماذا هذا يعمل في IE.;-)

هذا هو C # كود يمكنني استخدام ، وآمل أن تكون مفيدة.

StringBuilder strb = new StringBuilder();
strb.AppendFormat ( "User Agent: {0}{1}", Request.ServerVariables["http_user_agent"].ToString(), Environment.NewLine );
strb.AppendFormat ( "Browser: {0}{1}", Request.Browser.Browser.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Version: {0}{1}", Request.Browser.Version.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Major Version: {0}{1}", Request.Browser.MajorVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Minor Version: {0}{1}", Request.Browser.MinorVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Platform: {0}{1}", Request.Browser.Platform.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "ECMA Script version: {0}{1}", Request.Browser.EcmaScriptVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Type: {0}{1}", Request.Browser.Type.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "-------------------------------------------------------------------------------{0}",  Environment.NewLine );
strb.AppendFormat ( "ActiveX Controls: {0}{1}", Request.Browser.ActiveXControls.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Background Sounds: {0}{1}", Request.Browser.BackgroundSounds.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "AOL: {0}{1}", Request.Browser.AOL.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Beta: {0}{1}", Request.Browser.Beta.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "CDF: {0}{1}", Request.Browser.CDF.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "ClrVersion: {0}{1}", Request.Browser.ClrVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Cookies: {0}{1}", Request.Browser.Cookies.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Crawler: {0}{1}", Request.Browser.Crawler.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Frames: {0}{1}", Request.Browser.Frames.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Tables: {0}{1}", Request.Browser.Tables.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "JavaApplets: {0}{1}", Request.Browser.JavaApplets.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "JavaScript: {0}{1}", Request.Browser.JavaScript.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "MSDomVersion: {0}{1}", Request.Browser.MSDomVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "TagWriter: {0}{1}", Request.Browser.TagWriter.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "VBScript: {0}{1}", Request.Browser.VBScript.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "W3CDomVersion: {0}{1}", Request.Browser.W3CDomVersion.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Win16: {0}{1}", Request.Browser.Win16.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "Win32: {0}{1}", Request.Browser.Win32.ToString ( ), Environment.NewLine );
strb.AppendFormat ( "-------------------------------------------------------------------------------{0}", Environment.NewLine );
strb.AppendFormat ( "MachineName: {0}{1}", Environment.MachineName, Environment.NewLine );
strb.AppendFormat ( "OSVersion: {0}{1}", Environment.OSVersion, Environment.NewLine );
strb.AppendFormat ( "ProcessorCount: {0}{1}", Environment.ProcessorCount, Environment.NewLine );
strb.AppendFormat ( "UserName: {0}{1}", Environment.UserName, Environment.NewLine );
strb.AppendFormat ( "Version: {0}{1}", Environment.Version, Environment.NewLine );
strb.AppendFormat ( "UserInteractive: {0}{1}", Environment.UserInteractive, Environment.NewLine );
strb.AppendFormat ( "UserDomainName: {0}{1}", Environment.UserDomainName, Environment.NewLine );

تحرير:الحل أدناه لا ينصح.جرب هذا بدلا من ذلك: http://whichbrowser.net/

هذه المرة عملت بالنسبة لي ، ولكن النظر في قانون الآن, ليس لدي أي فكرة كيف.استخدام فوق بدلا من ذلك :-/

<script type="text/javascript">
    // <![CDATA[
    var BrowserCheck = Class.create({
        initialize: function () {
            var userAgent = navigator.userAgent.toLowerCase();
            this.version = (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1];
            this.safari = /webkit/.test(userAgent) && !/chrome/.test(userAgent);
            this.opera = /opera/.test(userAgent);
            this.msie = /msie/.test(userAgent) && !/opera/.test(userAgent);
            this.mozilla = /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent);
            this.chrome = /chrome/.test(userAgent);
        }
    });    
    // ]]>
</script>

لا ننسى أن تحتاج إلى تهيئة استخدامه ، لذا ضع هذا الكود:

var UserBrowser = new BrowserCheck();

ومن ثم تحقق من وجود نوع المتصفح وإصداره مثل ذلك:(مثلا ، إنترنت إكسبلورر 8)

if ((UserBrowser.msie == true) && (UserBrowser.version == 8))

الخ.

أتمنى أن لا وظيفة لك مثل ذلك بالنسبة لنا, ولكن تذكر أن لا متصفح الكشف واقية من الرصاص!

Internet explorer و أوراق الأنماط يمكنك استخدام بناء الجملة التالي:

<!--[if lte IE 6]><link href="/style.css" rel="stylesheet" type="text/css" /><![endif]-->

هذا applys IE 6 أو في وقت سابق.يمكنك تغيير أي نسخة أيضا:

<!--[if eq IE 7]> = Equal too IE 7
<!--[if gt IE 6]> = Greater than IE 6

ايم ليس متأكدا مما إذا كان هذا يعمل مع أجزاء أخرى من الصفحة ولكن يعمل عند وضعها داخل <head> الوسم.ترى هذا على سبيل المثال للحصول على مزيد من المعلومات

عموما, عندما المتصفح يجعل طلب يرسل مجموعة من المعلومات (وقت, تاريخ, وكيل المستخدم...).يجب أن تحاول أن ننظر إلى رؤوس العميل إرسال تذهب إلى الشخص الذي يخبرك المتصفح (أعتقد إنه "User-Agent:".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top