var browser = {};
var useragent = navigator.useragent.tolowercase();
alert(useragent);
browser.ie = window.activexobject && useragent.indexof('msie') != -1 && useragent.substr(useragent.indexof('msie') + 5, 3);
browser.firefox = document.getboxobjectfor && useragent.indexof('firefox') != -1 && useragent.substr(useragent.indexof('firefox') + 8, 3);
browser.chrome = window.messageevent && !document.getboxobjectfor && useragent.indexof('chrome') != -1 && useragent.substr(useragent.indexof('chrome') + 7, 10);
browser.opera = window.opera && opera.version();
browser.safari = window.opendatabase && useragent.indexof('safari') != -1 && useragent.substr(useragent.indexof('safari') + 7, 8);
browser.other = !browser.ie && !browser.firefox && !browser.chrome && !browser.opera && !browser.safari;
browser.firefox = browser.chrome ? 1 : browser.firefox;
其它更精短驗證代碼
利用基於 ie 的 bug
<script type='text/網頁特效'>
var ie = !-[1,];
alert(ie);
</script>
以上瀏覽器驗證代碼運行結果:ie 下返回true,其他標準瀏覽器返回false。!-[1,],僅僅只有 6 bytes!
不過如果反過來判斷,標準瀏覽器返回 true 而 ie 返回 false的話,則可以再縮短一個byte
<script type='text/javascript'>
notie = -[1,];
if(-[1,]){
// 標準瀏覽器代碼
}else{
// ie only的代碼
}
</script>
產生的原因是 ie 會添加一個空數組元素到數組元素的總數裡。
[1,]. length標準瀏覽器會返回 1 (基於標準的 ecmascript ,在數組最後的逗號”,”會被忽略,這是為了方便在一列裡顯示以及自動產生等),但是 ie 會返回 2。當你列印這個數組的時候 ie 將會返回 “1, “,也就是兩個元素,而其他標準瀏覽器將會返回 “1′。
<script type='text/javascript'>
// option from dean edwards:
var ie = /*@cc_on!@*/false;
// use the commented line:
var ie//@cc_on=1;
// variation (shorter variable):
var ie = ' '=='v';
/ / option to gareth hayes (former record-holder):
var ie = !+" 1";
</ script>
<script type='text/javascript'>
alert([,]==',');
//這是8個字元判定ie
</script>