Andrea Giammarchi「32 bytes, ehr ... 9, to know if your browser is IE」
Web Reflectionの2009.1.29のブログエントリ
Web Reflection: 32 bytes, ehr ... 9, ehr ... 7!!! to know if your browser is IE
「32バイトの文字列でIE判定できるコード書いたよ」と書いたらコメント欄のやりとりの中であれよあれよという内に、7バイトにまで短くなってしまったというブログエントリで、何度かUpdateされてる。
navigator.userAgentプロパティもIE独自のプロパティ(ex.document.uniqueID)も使わず、より少ないバイト数でIEを判定できるコードを紹介・解説するという趣旨のエントリ
3段階紹介されて、段階が上がるごとにバイト数がどんどん短くなる。
- レベル1:32バイト
- レベル2:13バイト
- レベル3:9バイト
レベル1:32バイト
既知ものと比べるとそんなに短くない。
try{IE=window=!1}catch(e){IE=!0}
レベル2:13バイト
コメント欄に登場したGareth Heyesの発案
if("\v"=="v")
このアイディアの核は、IE(というかJScript)がメタ文字「\v」を「v」と解釈する点にある。
補足1。JScriptでメタ文字\vがサポートされないのは仕様
ECMAScriptWIKIに「JScript Deviations from ES3」と題された文書がアップされて、その中に「\vはサポートしない」「\vはvだ」と書かれてる。
2.1 White Space: §7.2
JScript does not support the \v vertical tab character as a white space character. It treats \v as v.
JScript Deviations from ES3
補足2。2007年にDean Edwardsが作った17バイトのバージョン
if(/*@cc_on!@*/false)
Dean Edwards: Sniff!
ただしMS独自の条件付コンパイル(conditional compile)を使ったコード
補足3。object detectionを使っても17バイトまで切り詰め可能
17バイト
if(document.UniqueID)
18バイト
if(document.selection)