זהירות! אינטרנט אקספלורר 11 שינה את ה-User Agent String שלו

איציק פופ, מתכנת למוד סבל, שלח לי את התמונה הבאה מתוך האתר של לאומי כארד. הוא נכנס לאתר עם אינטרנט אקספלורר 11.

הנך משתמש בדפדפן לא מוכר. אנא עבור לאינטרנט אקספלורר 7 ומעלה או כרום/פיירפוקס. אבל הגולש השתמש באקספלורר 11.

הנך משתמש בדפדפן לא מוכר. אנא עבור לאינטרנט אקספלורר 7 ומעלה או כרום/פיירפוקס. אבל הגולש השתמש באקספלורר 11.

מה קרה כאן?

המתכנתים שבנו את האתר של לאומי כארד השתמשו ב-User Agent detection. מה זה בדיוק? מדובר במחרוזת טקסט קטנה שניתן לקרוא אותה עם JavaScript באופן הבא:


navigator.userAgent;

אתם מוזמנים להריץ את השורה הזו ב-console. כל דפדפן מחזיר תוצאה אחרת בהתאם לסוג הדפדפן. כרום למשל יחזיר:


"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36"

דפדפן אינטרנט אקספלורר 9 יחזיר משהו כזה:


Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/4.0; GTB7.4; InfoPath.3; SV1; .NET CLR 3.1.76908; WOW64; en-US)

באתר הזה יש רשימה אדירה של user strings של דפדפנים רבים רבים על מערכות הפעלה רבות כולל User String של מערכות שאינן דפדפנים כלל (כמו crawlers למשל).

מתכנת יכול לקחת את ה-User String ולבדוק באמצעותו את גרסת המשתמש. הסברתי במאמר על Browser detection איך עושים את זה.

מה הבעיה עם אינטרנט אקספלורר 11? מיקרוסופט בחוכמתה כה רבה, הודיעה על כך שהיא משנה את ה-User agent של אינטרנט אקספלורר 11 כך שיהיה מטעה בכוונה (!!!) וימנע ממתכנתים למצוא בקלות שמדובר באינטרנט אקספלורר 11.

כך הוא נראה:


    Mozilla/5.0 (Windows NT 6.3; Trident/7.0; .NET4.0E; .NET4.0C; rv:11.0) like Gecko

ה-User agent הזה שונה באופן מהותי מזה של הגרסאות האחרות של אינטרנט אקספלורר. השוו למשל ל-User agent של אינטרנט אקספלורר 10 שמצהיר על עצמו בגאון, בדומה לשאר הגרסאות, על היותו אינטרנט אקספלורר:


Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)

מיקרוסופט ממש ניסו, בכוח, להקשות על מתכנתים לבצע Browser detection. לא רק שהם הורידו את MSIE, הם הוסיפו את המילה Gecko למשל – שהיא מילת המפתח שמופיעה בדפדפן פיירפוקס.

וכך סקריפטים לגילוי דפדפנים שעבדו היטב עד לאחורנה, לא יעבדו באינטרנט אקספלורר 11. לרוע המזל של המתכנתים של בנק לאומי ושל שאר המתכנתים בעולם שהסתמכו על Browser detection.

כדי להגביר את השמחה והששון – אם אינטרנט אקספלורר 11 מבצע אמולוציה לגרסאות קודמות, אז גם שם ה-User agent משתנה למחרוזת שונה…. נהדר! 🙁

ביצוע Browser detection לאינטרנט אקספלורר 11

קודם כל – עדיף מאוד לא לבצע Browser detection. אפשר לעשות Feature detection נורמלי. כדאי לכם לעשות את זה – אם אי אפשר, אפשר פשוט לחפש את המילה Trident או MSIE כמו בדוגמה הבאה:


var trident = !!navigator.userAgent.match(/Trident\/7.0/);
var net = !!navigator.userAgent.match(/.NET4.0E/);
var IE11 = trident && net
var IEold = ( navigator.userAgent.match(/MSIE/i) ? true : false );
if(IE11 || IEold){
alert("IE")
}else{
alert("Other")
}

למה מיקרוסופט עשו את זה?

כמו כל פיצ'ר חדשני, עולה השאלה למה בדיוק מיקרוסופט עשו את זה? התירוץ הרשמי שלהם הוא שהם 'רוצים למנוע ממפתחים להשתמש ב-Browser detection'.
באופן אישי, אני חושב שמדובר בתירוץ עלוב. אני גם לא חושב ש-Browser detection הוא משהו נכון לעשות – אבל עם כל הכבוד מיקרוסופט הם מפתחי דפדפן, לא המחנכים של מתכנתי אינטרנט. יש פה עניין של תאימות לאחור. ובכך שהם שינו חלק מהותי שבו משתמשים לא מעט מתכנתים הם גרמו ללא מעט אפליקציות להשבר והוכיחו – שוב, שלמיקרוסופט אין שום רצון בלבוא לקראת המתכנתים אלא שוב הם מנסים להפיל על השוק את התכתיבים שלהם.

דרך חשיבה כזו כמובן היא לא רק אנכרוניסטית אלא גם פועלת כחרב פיפיות כנגד הדפדפן המחליא: מצד המתכנתים – היא לא מוסיפה אהבה גדולה לדפדפן הנתעב. אבל גם ככה רובם המוחץ של המתכנתים מתעבים את השיקוץ. מצד המשתמשים – טוב, אין כמו לשדרג את דפדפן אינטרנט אקספלורר ואז לקבל הודעות שגיאה באתר הבנק שלך… זה בטח יוביל חלק מהם לזרועות של דפדפנים אחרים.

אני כמובן. מאוד מקווה שבעתיד אקספלורר יעלם חזרה אל הגיהנום שממנו הוא הגיח כדי למרר את חייהם של מתכנתי הווב שעכשיו חלקם יצטרכו לשבת ולשנות את הסקריפטים שהם כתבו כדי (שוב) להתאים את עצמם לשגיונות של הקלגסים שאחראים לפיתוח התפלצת החדשה.

כדאי תמיד להשאר מעודכנים! הרשמו לעדכונים של האתר במייל! - המייל יישלח כל יום ראשון בעשר בבוקר ויכיל אך ורק את המאמרים שהתפרסמו באינטרנט ישראל. ללא ספאם, ללא הצפות, ללא בלגנים. 🙂

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (אין הצבעות)


אל תשארו מאחור! יש עוד מה ללמוד!

הצטרפו לעדכונים!

העדכונים נשלחים אך ורק כאשר האתר מתעדכן.

רן בר-זיק

רן בר-זיק כותב כל המאמרים באינטרנט ישראל, מפתח אינטרנט מנוסה במגוון שפות ופלטפורמות.
ניתן ליצור איתי קשר באמצעות:
כתובת המייל שלי: info@internet-israel.com.
פרופיל הלינקדאין שלי
הטוויטר שלי
פרופיל הפייסבוק שלי
אני תמיד שמח לייעץ ולעזור, אך בשל עומס הפניות הרב, אני לא תמיד מצליח לענות במהירות.

מאמרים אחרונים