בירור גרסאת הדפדפן באמצעות UserAgent – ולמה לא להשתמש ב-Navigator.appName

כחלק מפרויקט הגמר שלי, ייצרתי Agent ב-JavaScript שמצטרף לקוד הקיים, ומנטר את הביצועים שלו על לקוחות שונים. אחד מהפרמטרים, אותם הייתי רוצה להציג בדו"ח שאני מציג, היה שם הדפדפן.

לא שזו בעיה גדולה, זכרתי את navigator.appName, אז מיד השתמשתי בו. באופן מצחיק, כשבדקתי את האתר עם Chrome, גיליתי שה-appName הוא Netscape. באופן מצחיק עוד יותר, כשבדקתי את האתר עם Edge – גם שם ה-appName היה Netscape. פה חשדתי.

לאחר שיטוט קצר באינטרנט גיליתי ש-navigator.appName הוא deprecated, ושכל דפדפן יציג לי Netscape. אבל הממצא המעניין באמת, היה הקוד הזה:


navigator.sayswho= (function(){
var ua= navigator.userAgent, tem,
M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if(/trident/i.test(M[1])){
tem= /\brv[ :]+(\d+)/g.exec(ua) || [];
return 'IE '+(tem[1] || '');
}
if(M[1]=== 'Chrome'){
tem= ua.match(/\b(OPR|Edge)\/(\d+)/);
if(tem!= null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
}
M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
return M.join(' ');
})();

שהתברר כאחלה של קוד (הוא בסך הכל מברר את שם הדפדפן והגרסא שלו על פי navigator.userAgent, ולא על פי navigator.appName).

הוסף תגובה