طريقة آمنة تعتمد على الميزات لاكتشاف Google Chrome باستخدام Javascript؟

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

سؤال

كما يوضح العنوان، سأكون مهتمًا بالعثور على طريقة آمنة تعتمد على الميزات (أي بدون استخدام navigator.appName أو navigator.appVersion) لاكتشاف Google Chrome.

وأعني بالميزات، على سبيل المثال:

if(window.ActiveXObject) {
    // internet explorer!
}

يحرر: كما تمت الإشارة إليه، فإن السؤال ليس له معنى كبير (من الواضح أنه إذا كنت تريد تنفيذ ميزة ما، فإنك تختبرها، وإذا كنت تريد اكتشاف متصفح معين، فإنك تتحقق من وكيل المستخدم)، آسف، إنها الساعة الخامسة صباحًا ;) اسمحوا لي أن أصيغ الأمر على النحو التالي:هل هناك أي كائنات و/أو ميزات جافا سكريبت فريدة لمتصفح Chrome...

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

المحلول

isChrome = function() {
    return Boolean(window.chrome);
}

نصائح أخرى

هذه الإجابة قديمة جدًا, لكنها كانت ذات صلة كبيرة في ذلك الوقت في العصر الحجري.

أعتقد أن اكتشاف الميزات أكثر فائدة من تحليل navigator.userAgent، حيث أنني بحثت في Google عن غموض Opera هنا.لا أحد يستطيع معرفة ما إذا كان IE16 سيقوم بتحليل /MSIE 16.0;/ regexp - ولكن يمكننا التأكد تمامًا من أنه سيكون هناك دعم للوثيقة.في الحياة الواقعية، عادةً ما تكون الميزات مرادفة للمتصفحات، مثل: "لا يوجد طلب XMLHttpRequest؟إنه f....d IE6!"لا يوجد متصفح غير IE يدعم document.all، لكن بعض المتصفحات مثل Maxthon يمكنها تشويش userAgent.(بالطبع يمكن للبرنامج النصي تعريف document.all في Firefox لسبب ما، ولكن يمكن التحكم فيه بسهولة.) لذلك أقترح هذا الحل.

يحرر هنا لقد وجدت موارد كاملة.

تحرير 2 لقد اختبرت أن document.all مدعوم أيضًا بواسطة Opera!

var is = {
  ff: window.globalStorage,
  ie: document.all && !window.opera,
  ie6: !window.XMLHttpRequest,
  ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera,
  ie8: document.documentMode==8,
  opera: Boolean(window.opera),
  chrome: Boolean(window.chrome),
  safari: window.getComputedStyle && !window.globalStorage && !window.opera
}

الاستخدام بسيط:

if(is.ie6) { ... }

ليس بالضبط إجابة على السؤال ...ولكن إذا كنت تحاول اكتشاف علامة تجارية معينة للمتصفح، فستكون نقطة التحقق من الميزات مفقودة نوعًا ما.أشك بشدة في أن أي متصفحات أخرى تستخدم سلسلة Chrome userAgent، لذا إذا كان سؤالك هو "هل هذا المتصفح Chrome"، فيجب عليك إلقاء نظرة على ذلك.(بالمناسبة، window.ActiveXObject لا يضمن IE، فهناك مكونات إضافية للمتصفحات الأخرى التي توفر هذا الكائن.وهو ما يوضح النقطة التي كنت أحاول توضيحها.)

بكل المعايير النازية..في بعض الأحيان قد ترغب في استخدام "التقنيات القياسية" التي لم تصبح قياسية بعد ولكنها ستكون...مثل ميزات CSS3.

وهذا هو السبب وراء العثور على هذه الصفحة.

لسبب ما، يقوم Safari بتشغيل مجموعة من الحدود مع نصف القطر بشكل جيد، ولكن Chrome لا يعرض المجموعة بشكل صحيح.لذلك سيكون من الجيد إيجاد طريقة لاكتشاف الكروم على الرغم من أن مجموعة أدوات الويب هي التي تقوم بتعطيل المجموعة.

لقد واجهت مئات الأسباب لاكتشاف متصفح/إصدار محدد والذي عادةً ما ينتهي به الأمر إلى إلغاء فكرة لميزة رائعة لأن ما أريد القيام به غير مدعوم بالشر الكبير...

لكن في بعض الأحيان، تكون بعض الميزات رائعة جدًا بحيث لا يمكن استخدامها، حتى لو لم يتم توحيدها بعد.

لذا، إذا قبلت وجهة نظر مارين و نكون مهتم باختبار سلسلة وكيل المستخدم عبر جافا سكريبت:

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

(الائتمان ل: http://davidwalsh.name/detecting-google-chrome-javascript )


إليك تحليلًا/تفصيلًا رائعًا لسلسلة وكيل مستخدم chromes: http://www.simonwhatley.co.uk/whats-in-google-chromes-user-agent-string

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

هناك مشكلة في الحلول الخاصة بالمتصفح، وهي أنك لا تعرف ما إذا كان قد تم إصلاح الخلل أو ما إذا كانت الميزة مدعومة الآن.عندما تقوم بالكشف عن القدرات، فإنك يعرف المتصفح يدعمه أو لا يدعمه بشكل مباشر، وأنت لست مجرد متصفح.

http://diveintohtml5.ep.io/everything.html

لا يجب أن تكتشف Chrome على وجه التحديد.إذا كان هناك أي شيء، فيجب أن تكتشف WebKit، حيث أنه فيما يتعلق بعرض الصفحة، يجب أن يتصرف Chrome تمامًا مثل متصفحات WebKit الأخرى (Safari، Epiphany).

إذا كنت لا تحتاج إلى اكتشاف WebKit فحسب، بل تحتاج أيضًا إلى معرفة الإصدار المستخدم بالضبط، فراجع هذا الرابط: http://trac.webkit.org/wiki/DetectingWebKit

ولكن مرة أخرى، كما قال أشخاص آخرون أعلاه، لا ينبغي عليك اكتشاف المتصفحات، بل يجب عليك اكتشاف الميزات.راجع مقالة ADC هذه لمعرفة المزيد حول هذا: http://developer.apple.com/internet/webcontent/objectdetection.html

أحد الأسباب التي قد تدفعك إلى معرفة أن المتصفح هو Chrome هو أنه متوافق جدًا مع المعايير.لقد واجهت بالفعل مشكلات مع كود JavaScript القديم الذي اعتقدت أنه متوافق مع المعايير (وفقًا لمعايير FF أو Opera - وهي جيدة جدًا)، ولكن Chrome كان أكثر انتقائية.لقد أجبرني ذلك على إعادة كتابة بعض التعليمات البرمجية، ولكن في بعض الأحيان قد يكون من الأسهل استخدام خدعة if(isChrome) { blah...blah ) لتشغيلها.يبدو أن Chrome يعمل بشكل جيد للغاية (أنا أؤيد الامتثال القياسي)، ولكن في بعض الأحيان تحتاج فقط إلى معرفة ما يقوم المستخدم بتشغيله بتفاصيل دقيقة.

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

أستخدم هذا الرمز لإنشاء إشارات مرجعية لكل متصفح (أو لعرض رسالة لـ webkit)

if (window.sidebar) { 
// Mozilla Firefox Bookmark
window.sidebar.addPanel(title, url,"");
} else if( window.external ) { // IE Favorite
  if(window.ActiveXObject) {
  //ie
  window.external.AddFavorite( url, title);
  } else {
  //chrome
  alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok');
  }
} else if(window.opera && window.print) { 
// Opera
  return true; }
 else { //safri
 alert('Press ctrl+D to bookmark (Command+D for macs) after you click Ok'); }

قد تكون هناك نتائج إيجابية كاذبة نظرًا لوجود الأوبرا أيضًا window.chrome هدف.كحل لطيف أستخدمه.

var isOpera = !!window.opera || !!window.opr;// Opera 8.0+

var isChrome = !!window.chrome && !isOpera;

هذا الحل يعمل دائمًا تقريبًا.لكن الشيء الوحيد الذي اكتشفته هو أنه، isChrome عائدات false في iPad Chrome الإصدار 52.0 كـ window.chrome عائدات false.

إيزي:!!(!window.addEventListener && window.ActiveXObject),

isIE6:typeof document.createElement('DIV').style.maxHeight == "غير محدد"،

isIE7:!!(!window.addEventListener && window.XMLHttpRequest && !document.querySelectorAll),

isIE8:!!(!window.addEventListener && document.querySelectorAll && document.documentMode == 8),

هو أبو بريص:navigator.product == 'أبو بريص'،

isOpera:!!window.opera,

هو كروم:!!نافذة كروم،

isWebkit:!!(!window.opera && !navigator.taintEnable && document.evaluate && navigator.product != 'Gecko'),

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