بغض النظر عن إصدار متصفح IE، فهو دائمًا غير متوافق إلى حد ما مع معايير الويب. بالنسبة لعمال الكود، فمن الطبيعي أن يتم التعامل مع مشكلة توافق IE في الاعتبار، سواء عند كتابة CSS أو JS، فغالبًا ما يتم التعامل مع IE بشكل خاص، الأمر الذي يتطلب بعض الحكم. لا تناقش هذه المقالة كيفية التمييز بين أنماط IE، فقط JS هي التي تحدد متصفح IE.
أقصر طريقة جافا سكريبت في العالم لتحديد متصفح IE تأتي من روسيا! وقد تم اختباره على إصدارات مختلفة من IE والمتصفحات الشائعة الأخرى حاليًا. وعلى الرغم من أن Microsoft كانت على علم بالأخطاء المستندة إلى IE، إلا أنها لم تقم بتصحيحها مطلقًا.
| <script type='text/javascript'> var ie = !-[1,]; تنبيه (أي)؛ </script> |
نتيجة تنفيذ التعليمات البرمجية أعلاه: إرجاع صحيح ضمن IE، وإرجاع خطأ ضمن المتصفحات القياسية الأخرى. !-[1,]، 6 بايت فقط!
ومع ذلك، إذا تم عكس الحكم، إذا أعاد المتصفح القياسي القيمة true وأرجع IE الخطأ، فيمكن تقصيره بمقدار بايت واحد.
| <script type='text/javascript'> notIe = -[1,]; إذا (-[1،]){ // رمز المتصفح القياسي }آخر{ // كود لـ IE فقط } </script> |
بعد قراءة هذا، هل لديك فضول حول كيفية عمل هذه الأشياء؟ يرجى مواصلة القراءة أدناه.
يحدث هذا الخطأ لأن IE يضيف عنصر صفيف فارغًا إلى العدد الإجمالي لعناصر الصفيف.
[1،]. سيعرض المتصفح القياسي الطول 1 (استنادًا إلى ECMAscript القياسي، سيتم تجاهل الفاصلة في نهاية المصفوفة "، وهذا لتسهيل العرض في العمود والإنشاء التلقائي، وما إلى ذلك)، ولكن IE سوف يعود 2. عند طباعة هذه المصفوفة، سيُرجع IE "1،" وهو عنصرين، بينما ستعرض المتصفحات القياسية الأخرى "1″".
من السهل التحقق من ذلك عن طريق تشغيل الكود التالي في IE وFF:
| <script type='text/javascript'> تنبيه([,]==','); // هذا 8 أحرف لتحديد IE </script> |
[1،] في الواقع، عمل المتصفح هو toString () لتحويل السلسلة إلى سلسلة، و-[1،] هو تحويل السلسلة إلى رقم. سوف يقوم IE بإرجاع NaN، ولكن للأسف NaN ليس رقمًا، لأن "1"، بعد [1،] يتم تحويله إلى سلسلة، ويحتوي على فاصلة. المتصفحات القياسية الأخرى سوف ترجع -1، وهو رقم غير الصفر.
كما تعلم، فإن تحويل NaN إلى نوع منطقي سيُرجع خطأ، لذا -[1,] سيُرجع خطأ ضمن IE. أي رقم غير 0 يتم تحويله إلى نوع منطقي (مثل -1) سيعود صحيحًا ضمن المتصفحات القياسية. لذلك حصلنا على نتيجة حكم، !-[1,] تُرجع صحيحًا ضمن IE، ولكنها تُرجع خطأ ضمن المتصفحات القياسية الأخرى. وهذا يحقق أيضًا غرض التمييز والحكم على متصفحات IE.
بالطبع، كما ذكرنا من قبل، عرفت Microsoft بالفعل عن هذا الخطأ لفترة طويلة، لكنها لم تقم بإصلاحه مطلقًا، لذلك في المستقبل > متصفح IE8 IE ليس متأكدًا مما إذا كان سيظل يعمل، ولكن بشكل أساسي بعد أجيال عديدة من IE لم يتم إصلاحه، ومن غير المرجح أن يتم إصلاح IE في المستقبل.
فيما يلي بعض الأكواد الأخرى للتمييز والحكم على متصفحات IE، يمكنك أيضًا الرجوع إلى ما يلي:
| <script type='text/javascript'> // خيار من دين إدواردز: var ie = /*@cc_on!@*/false; // استخدم السطر الذي تم التعليق عليه: فار ie//@cc_on=1; // الاختلاف (المتغير الأقصر): var ie = 'v'=='v'; // خيار لجاريث هايز (صاحب الرقم القياسي السابق): var ie = !+"v1"; </script> |