返回列表 發帖

一行 JavaScript 偵測出你用的瀏覽器

雖然已經是老生常談了,但是還是要提醒一下看官們,除非是要做一個統計分析的系統,否則盡量避免用 JavaScript 偵測瀏覽器的版本,詳情可參考 ppk 的 Object detection 一文。此外 jQuery 在 v1.3 之後也宣佈將把 $.browser 的功能給廢除,改用特性偵測的方式來取代,由此可知,特性偵測將會是未來要寫相容性語法時的主要方向。

話雖如此,偶爾還是需要去偵測瀏覽器版本,特別是底下這段程式碼不秀一下真是太可惜了,一行程式碼可以偵測出目前主流的幾個瀏覽器版本:
B=(function x(){})[-5]=='x'?'FF3':(function x(){})[-6]=='x'?'FF2':/a/[-1]=='a'?'FF':'\v'=='v'?'IE':/a/.__proto__=='//'?'Saf':/s/.test(/a/.toString)?'Chr':/^function \(/.test([].sort)?'Op':'Unknown'
以上這段是節錄自 Ajaxian 的 IE='\v'=='v' 一文,截至目前為止 IE='\v'=='v' 是能判斷出 IE 的最短程式碼。評論裡面還可以找到一些有趣的簡短程式碼,有興趣的人可以去看看喔~
To infinity and beyond!

真的很好用耶
已經測試成功了
以後就直接使用這樣就可以了呀
ㄎㄎ
邁向神乎其技的境界^^

TOP

後來無意中測試到
IE跟FF瀏覽器都會被偵測到

但Safari瀏覽器似乎沒辦法被偵測到^^|||(是因為尚不支援嗎)
至於Chr跟Op瀏覽器因為我沒有所以也沒法測說
<body onLoad="viewer()" >
<script language="javascript" type="text/javascript">
/*==================*/
//最短偵測瀏覽器程式碼
/*==================*/
function viewer()
{
B=(function x(){})[-5]=='x'?'FF3' : (function x(){})[-6]=='x'?'FF2':/a/[-1]=='a'?'FF':'\v'=='v'?'IE':/a/.__proto__=='//'?'Saf':/s/.test(/a/.toString)?'Chr':/^function \(/.test([].sort)?'Op':'Unknown'
document.write(B);
}
</script>
</body>
[ 本帖最後由 bau720123 於 2009-4-22 10:56 編輯 ]
邁向神乎其技的境界^^

TOP

看程式內容應該是可以偵測 Safari 和 Opera,我本身都用 Chrome,剛剛用 console 跑也可以正確偵測無誤。
To infinity and beyond!

TOP

ㄟ???我剛剛用Chrome瀏覽器(Google 的那個)最新版 2.01725
結果還是偵測不到耶
結果還是空白一片

我應該沒用錯吧^^|||
還是說您可以把您在Chrome跑過的您可以的那支
PO出來讓我參考看看呢
ㄚ_ㄚ

目前最新狀況
偵測的狀況如下
IE6:可以
IE7:可以
IE8:應該可以
FF3:可以
Sa3:目前空白一片
Ch2:目前空白一片
Op9:可以

[ 本帖最後由 bau720123 於 2009-4-21 17:50 編輯 ]
邁向神乎其技的境界^^

TOP

你可以在 Chrome 按下 Ctrl-Shift-J 開啟 console,在 console 下輸入第一篇的程式片段後,就可以看到結果囉~
To infinity and beyond!

TOP

您好
在試過Ctrl-Shift-J
並輸入語法後真的得到了Chr的答案
但我百思不得其解的是
為何Chrome要在Cosole模式下才會有作用

後來我透過一個小程式來實驗看看
<body onload="viewer();">
<script language="javascript" type="text/javascript">
function viewer()
{
document.write("把我印出來");
alert("把我印出來");
}
</script>
</body>
後來我有查出原因了
document.write(B);
把"把我印出來"的值印出來--這應該是無庸置疑的吧
也應該是通用的語法吧

但是Chrome跟Safari似乎對這段語法的支援度不是那麼的好
所以解析不出來這段語法的意思--所以印出空
如果我改成alert("把我印出來");
就可以alert的出來--我將這個小小的發現回饋給大家
邁向神乎其技的境界^^

TOP

我想可能是你執行 document.write 的方式比較有爭議,因為 document.write 會在文件上寫入資訊,但是當你在 body onload 的地方呼叫時,這時可能 Chrome 和 Safari 不知道要寫在哪裡,或者是確實有寫到某個地方,但是不是在你想的地方。
To infinity and beyond!

TOP

了解
謝謝您再次的回覆^^
邁向神乎其技的境界^^

TOP

返回列表 回復 發帖