كيف يمكنني اكتشاف المتصفح المستخدم للوصول إلى موقعي؟

StackOverflow https://stackoverflow.com/questions/121280

  •  02-07-2019
  •  | 
  •  

سؤال

كيف يمكنني اكتشاف المتصفح (IE، Firefox، Opera) الذي يستخدمه المستخدم للوصول إلى موقعي؟قد تكون الأمثلة في Javascript، وPHP، وASP، وPython، وJSP، وأي أمثلة أخرى يمكنك التفكير فيها مفيدة.هل هناك طريقة حيادية للغة للحصول على هذه المعلومات؟

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

المحلول

إذا كان الأمر يتعلق بمعالجة الطلب، فانظر إلى وكيل المستخدم رأس الطلب الوارد.

تحديث:إذا كان الأمر مخصصًا لإعداد التقارير، فقم بتكوين خادم الويب الخاص بك لتسجيل وكيل المستخدم في سجلات الوصول، ثم قم بتشغيل أداة تحليل السجل، على سبيل المثال، أوستاتس.

التحديث 2:لمعلوماتك، إنه كذلك عادة (ليس دائمًا، عادةً) فكرة سيئة تغيير الطريقة التي تتعامل بها مع الطلب بناءً على وكيل المستخدم.

نصائح أخرى

سوف تلقي نظرة على وكيل المستخدم أنهم يرسلون.لاحظ أنه يمكنك إرسال أي وكيل تريده، وهذا ليس مضمونًا بنسبة 100%، ولكن معظم الأشخاص لا يغيرونه إلا إذا كان هناك سبب محدد لذلك.

مثال جافا servlet سريع وقذر

private String getBrowserName(HttpServletRequest request) {
    // get the user Agent from request header
    String userAgent = request.getHeader(Constants.BROWSER_USER_AGENT);
    String BrowesrName = "";
    //check for Internet Explorer
    if (userAgent.indexOf("MSIE") > -1) {
        BrowesrName = Constants.BROWSER_NAME_IE;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_FIREFOX) > -1) {
        BrowesrName = Constants.BROWSER_NAME_MOZILLA_FIREFOX;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_OPERA) > -1) {
        BrowesrName = Constants.BROWSER_NAME_OPERA;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_SAFARI) > -1) {
        BrowesrName = Constants.BROWSER_NAME_SAFARI;
    } else if (userAgent.indexOf(Constants.BROWSER_NAME_NETSCAPE) > -1) {
        BrowesrName = Constants.BROWSER_NAME_NETSCAPE;
    } else {
        BrowesrName = "Undefined Browser";
    }
    //return the browser name
    return BrowesrName;
}

يمكنك استخدام فئة HttpBrowserCapabilities في ASP.NET.وهنا عينة من هذا وصلة

private void Button1_Click(object sender, System.EventArgs e)
{
        HttpBrowserCapabilities bc;
        string s;
        bc = Request.Browser;
        s= "Browser Capabilities" + "\n";
        s += "Type = " + bc.Type + "\n";
        s += "Name = " + bc.Browser + "\n";
        s += "Version = " + bc.Version + "\n";
        s += "Major Version = " + bc.MajorVersion + "\n";
        s += "Minor Version = " + bc.MinorVersion + "\n";
        s += "Platform = " + bc.Platform + "\n";
        s += "Is Beta = " + bc.Beta + "\n";
        s += "Is Crawler = " + bc.Crawler + "\n";
        s += "Is AOL = " + bc.AOL + "\n";
        s += "Is Win16 = " + bc.Win16 + "\n";
        s += "Is Win32 = " + bc.Win32 + "\n";
        s += "Supports Frames = " + bc.Frames + "\n";
        s += "Supports Tables = " + bc.Tables + "\n";
        s += "Supports Cookies = " + bc.Cookies + "\n";
        s += "Supports VB Script = " + bc.VBScript + "\n";
        s += "Supports JavaScript = " + bc.JavaScript + "\n";
        s += "Supports Java Applets = " + bc.JavaApplets + "\n";
        s += "Supports ActiveX Controls = " + bc.ActiveXControls + "\n";
        TextBox1.Text = s;
}

يحتوي المصفوفة العالمية الفائقة المحددة مسبقًا لـ PHP $_SERVER على مفتاح "HTTP_USER_AGENT"، والذي يحتوي على قيمة رأس وكيل المستخدم كما تم إرساله في طلب HTTP. تذكر أن هذه بيانات مقدمة من المستخدم ولا يمكن الوثوق بها. يقوم عدد قليل من المستخدمين بتغيير سلسلة وكيل المستخدم الخاصة بهم، ولكن هذا يحدث من وقت لآخر.

على جانب العميل، يمكنك القيام بذلك في Javascript باستخدام كائن navigation.userAgent.وإليك مثال الخام:

if (navigator.userAgent.indexOf("MSIE") > -1) 
{
    alert("Internet Explorer!");
}
else if (navigator.userAgent.indexOf("Firefox") > -1)
{
    alert("Firefox!");
}

يمكن العثور على مثال أكثر تفصيلاً وشمولاً هنا: http://www.quirksmode.org/js/detect.html

لاحظ أنه إذا كنت تقوم بالكشف عن المتصفح من أجل توافق Javascript، فمن الأفضل عادةً استخدام اكتشاف الكائنات أو كتلة المحاولة/الالتقاط، خشية أن تتسلل بعض الإصدارات التي لم تفكر في وجودها عبر شقوق البرنامج النصي الخاص بك.على سبيل المثال، بدلاً من القيام بذلك...

if(navigator.userAgent.indexOf("MSIE 6") > -1)
{
    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
    objXMLHttp = new XMLHttpRequest();
}

...هذا أفضل:

if(window.XMLHttpRequest) // Works in Firefox, Opera, and Safari, maybe latest IE?
{
    objXMLHttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) // If the above fails, try the MSIE 6 method
{
    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
}

قد يعتمد ذلك على الإعداد الخاص بك.مع Apache على Linux، يتم كتابته في سجل الوصول /var/log/Apache2/access_log

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

أولاً، أود أن أشير إلى أنه من الأفضل تجنب التصحيح ضد متصفحات ويب معينة، إلا إذا كنتيجة أخيرة - حاول تحقيق التوافق عبر المتصفحات بدلاً من استخدام HTML/CSS/JS المتوافق مع المعايير (نعم، تحتوي جافا سكريبت على مجموعة فرعية ذات قاسم مشترك، والتي تعمل عبر جميع المتصفحات الرئيسية).

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

تطابق ضد هذا:

يحتوي على متصفح

فايرفوكس -> فايرفوكس

MSIE -> إنترنت إكسبلورر

Opera -> Opera (أحد المتصفحات القليلة التي لا تتظاهر بأنها Mozilla :))

معظم الوكلاء الذين يحتويون على الكلمات "bot" أو "الزاحف" هم عادةً روبوتات (لذا يمكنك حذفها من السجلات/إلخ)

الدفع browsercap.ini.يحتوي الموقع المرتبط على ملفات للغات البرمجة النصية المتعددة.لا يحدد Browsecap وكيل المستخدم فحسب، بل يحتوي أيضًا على معلومات حول دعم CSS للمتصفح، ودعم JS، ونظام التشغيل، إذا كان متصفحًا للجوال وما إلى ذلك.

رحلة بحرية إلى هذه الصفحة للاطلاع على مثال للمعلومات التي يمكن أن يخبرك بها موقع browsercap.ini عن متصفحك الحالي.

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