قبل القراءة:
قبل قراءة المحتوى المحدد للمقال، أتمنى أن تتمكن من فتح IE8 أولاً، وفتح http://www.taobao.com ، ثم أدخل في شريط العناوين:
جافا سكريبت:تنبيه (document.documentMode +navigator.userAgent)؛باطل (0)
لا أعرف إذا كنت متفاجئًا بعد رؤية النتائج على أي حال، أجد الأمر غريبًا جدًا، لأنه لا توجد علامة توافق في تعريف الصفحة، ولا توجد علامة متوافقة مع X-UA في رأس http عندما يتحقق عازف الكمان. لماذا يعمل موقع الويب في وضع IE7 ؟ أين هو التالي؟
وضع التوافق IE7 وعرض التوافق
بالأمس، عندما كنت أقرأ مقالًا عن iframe عالي التكيف في Word of Mouth، وجدت أن العرض التوضيحي الذي قدمه كان مختلفًا عن العرض التوضيحي الذي قدمته في IE8، ومن الواضح أن النتيجة عبر الإنترنت كانت هي نفسها كما في IETester7، وقد تحققت منها أيضًا لا توجد علامة توافق في ملف التعريف، ويتحقق عازف الكمان من عدم وجود علامة متوافقة مع X-UA في رأس http، ولكن لماذا تختلف النتائج عبر الإنترنت عن النتائج المحلية؟ لقد أصابني هذا بالاكتئاب. بعد النظر إليه مرة أخرى، وجدت أن العرض التوضيحي عبر الإنترنت لم يعرض زر "عرض التوافق" في IE8. بالتفكير في الأمر، يجب أن يكون هذا هو السبب.
وجدت لاحقًا مقالًا بعنوان Just The Facts: Recap of Compatibility View، على الرغم من أنه لم يحل المشكلة، إلا أن محتواه كان جيدًا وأود مشاركته واقتباس أحد فقراته:
طريقة عرض التوافق والعلامة المتوافقة مع X-UA غير متكافئتين
طريقة عرض التوافق هي شيء تفعله على العميل، فهو يؤثر على ثلاثة أشياء: سلسلة وكيل المستخدم، وناقل الإصدار (المستخدم في تقييم التعليقات الشرطية)، ووضع DOCTYPEs الذي يتم تعيين المعايير إليه - معايير IE8 أو معايير IE7 - علامة / رأس <META> المتوافق مع UA هو شيء تستخدمه في محتوى الصفحة / جانب الخادم، وعندما يكون موجودًا، فإنه يتجاوز إعدادات عرض التوافق تمامًا على العميل، وهو يؤثر على شيئين: ناقل الإصدار ووضع DOCTYPEs الذي يؤدي إلى تشغيل المعايير لا يمكن أن يؤثر ذلك على سلسلة UA لأن الوقت قد فات بالفعل لتغيير ذلك - فقد قدم العميل بالفعل طلب GET إلى الخادم (ويحتوي على سلسلة UA). في سلسلة وكيل المستخدم، فإن إضافة علامة X-UA-Compatible فقط (لجعل IE8 يعرض موقعك في وضع معايير IE7) لن يجعل موقع الويب الخاص بك متوافقًا - ستحتاج أيضًا إلى تحديث منطق اكتشاف سلسلة وكيل المستخدم الخاص بك حسنًا.
وهذا يعني أن عرض التوافق يلعب ثلاثة أدوار:
تلعب العلامة الوصفية دورين فقط: 1. الإصدار، 2. نوع المستند
(يقال هنا أن العلامة الوصفية لا تؤثر على UserAgent. يجب أن تشير إلى ua على جانب الخادم. نظرًا لأنه تم إرسال طلب العميل ويحتوي على ua، فلن يتأثر. ومع ذلك، لا يزال ua الخاص بالعميل المتأثرة، ويتم عرض ie7.)
صحيح:
(ربما كان الاختبار السابق خاطئًا) لن يتأثر UA الخاص بالعميل، بل سيؤثر فقط على document.documentMode
فضلاً عن ذلك:
تشير علامة/رأس <META> على التوالي إلى: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> وإضافة رؤوس http على جانب الخادم، كما هو الحال في ملف التكوين .net:
بالإضافة إلى ذلك، يمكنك أيضًا إضافة رؤوس http إلى IIS أو Apache:
حل المشكلة
في هذه المرحلة، لم يتم حل المشكلة في بداية المقالة. الليلة الماضية، رأيت بالصدفة مقالة Qin Ge حول استخدام doctype لتنشيط وضع المتصفح . تذكر أنه سيتم تمكين وضع التوافق أيضًا في قائمة مواقع القائمة السوداء لـ Microsoft المقالة أعلاه أحد التعليقين هو: res://iecompat.dll/iecompatdata.xml (IE8 فقط). أدخل هذا العنوان في IE8 وسيعرض: قائمة عرض التوافق، وبهذه الطريقة، يمكنك أخيرًا العثور على المجال أسماء Koubei وTaobao في هذه القائمة، لذلك أعتقد أن هذا يجب أن يكون إجابة السؤال في بداية هذه المقالة. يمكنك أيضًا العثور على اسم المجال في هذه القائمة، وفتحه، وإدخال جافا سكريبت في بداية المقالة الموجودة في شريط العناوين (ملاحظة: لدى Microsoft قوائم كثيرة جدًا)، مما يحول العديد من المواقع إلى IE7.
<التكوين>
<نظام.ويب سيرفر>
<httpالبروتوكول>
<رؤوس مخصصة>
<واضح />
<أضف اسم = "X-UA-Compatible" value = "IE=EmulateIE7" />
</customHeaders>
</httpالبروتوكول>
</system.webServer>
</التكوين>