ไม่ว่าเบราว์เซอร์ IE จะเป็นเวอร์ชันใดก็ตาม ก็มักจะเข้ากันไม่ได้กับมาตรฐานเว็บเสมอ สำหรับคนทำงานโค้ด มักจะเป็นเรื่องที่น่าสังเวชในการพิจารณาปัญหาความเข้ากันได้ของ IE ไม่ว่าจะเขียน CSS หรือ JS ก็ตาม IE มักจะได้รับการปฏิบัติเป็นพิเศษ ซึ่งต้องมีการตัดสินบางประการ บทความนี้ไม่ได้กล่าวถึงวิธีแยกแยะสไตล์ของ IE มีเพียง JS เท่านั้นที่จะกำหนดเบราว์เซอร์ IE
วิธี Javascript ที่สั้นที่สุดในโลกในการระบุเบราว์เซอร์ IE มาจากรัสเซีย! มีการทดสอบกับ IE เวอร์ชันต่างๆ และเบราว์เซอร์ยอดนิยมอื่นๆ ในปัจจุบัน แม้ว่า Microsoft จะทราบถึงข้อบกพร่องเกี่ยวกับ IE แล้ว แต่ก็ไม่เคยแก้ไขข้อบกพร่องเหล่านั้น
<script type='text/javascript'> var คือ = !-[1,]; การแจ้งเตือน (เช่น); </สคริปต์> |
ผลลัพธ์การเรียกใช้โค้ดข้างต้น: คืนค่าจริงภายใต้ IE และส่งกลับค่าเท็จภายใต้เบราว์เซอร์มาตรฐานอื่น ๆ !-[1,] เพียง 6 ไบต์!
อย่างไรก็ตาม หากการตัดสินกลับกัน หากเบราว์เซอร์มาตรฐานคืนค่าเป็นจริงและ IE ส่งคืนค่าเท็จ ก็สามารถย่อให้สั้นลงได้หนึ่งไบต์
<script type='text/javascript'> ไม่ใช่ = -[1,]; ถ้า(-[1,]){ // รหัสเบราว์เซอร์มาตรฐาน }อื่น{ // รหัสสำหรับ IE เท่านั้น - </สคริปต์> |
หลังจากอ่านข้อความนี้แล้ว คุณสงสัยหรือไม่ว่าสิ่งเหล่านี้ทำงานอย่างไร โปรดอ่านต่อด้านล่าง
จุดบกพร่องนี้เกิดขึ้นเนื่องจาก IE เพิ่มองค์ประกอบอาร์เรย์ว่างให้กับจำนวนองค์ประกอบอาร์เรย์ทั้งหมด
[1,] เบราว์เซอร์มาตรฐานความยาวจะส่งกลับ 1 (ขึ้นอยู่กับ ECMAscript มาตรฐาน เครื่องหมายจุลภาคที่ส่วนท้ายของอาร์เรย์ "," จะถูกละเว้น นี่คือเพื่ออำนวยความสะดวกในการแสดงผลในคอลัมน์และการสร้างอัตโนมัติ ฯลฯ ) แต่ IE จะกลับมา 2 เมื่อคุณพิมพ์อาร์เรย์นี้ IE จะส่งกลับ "1, " ซึ่งเป็นสององค์ประกอบ ในขณะที่เบราว์เซอร์มาตรฐานอื่นๆ จะส่งกลับ "1″"
ง่ายต่อการตรวจสอบโดยการรันโค้ดต่อไปนี้ใน IE และ FF:
<script type='text/javascript'> การแจ้งเตือน([,]==','); //นี่คือ 8 ตัวอักษรเพื่อกำหนด IE </สคริปต์> |
[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'> // ตัวเลือกจาก Dean Edwards: var เช่น = /*@cc_on!@*/false; // ใช้บรรทัดแสดงความคิดเห็น: var เช่น//@cc_on=1; // รูปแบบ (ตัวแปรที่สั้นกว่า): var คือ = 'v'=='v'; // ตัวเลือกของ Gareth Hayes (อดีตเจ้าของสถิติ): var คือ = !+"v1"; </สคริปต์> |