文章類(lèi)別:Javascript 發(fā)表日期:2006-7-27 星期四
判斷訪(fǎng)問(wèn)者的瀏覽器是否支持JavaScript和Cookies
許多網(wǎng)站需要客戶(hù)端做許多復雜的工作,比如:用客戶(hù)端 JavaScript 進(jìn)行數據合法性校驗,這需要客戶(hù)瀏覽器的JavaScript enabled;使用 Session 變量記錄身份等信息,需要瀏覽器 Cookies enabled。因此,有必要確定用戶(hù)瀏覽器中的這些選項被打開(kāi)。在我的網(wǎng)站中,我使用了一串簡(jiǎn)潔的代碼實(shí)現這些功能,在用戶(hù)登錄時(shí)進(jìn)行檢查,如果不符合就不讓登錄。在本文中,我就介紹一下這個(gè)login頁(yè)面的寫(xiě)法。
我們首先用 JavaScript 建立一個(gè) Cookie,然后檢查 Cookie 是否存在。由于我們使用 JavaScript 進(jìn)行這項操作,如果用戶(hù)沒(méi)有打開(kāi) JavaScript,但打開(kāi)了 Cookies 的話(huà),我們仍然會(huì )得到 Cookies 沒(méi)打開(kāi)的結果。但這與我們的要求并不沖突,反正我們是要求兩者都打開(kāi)的。(如果你確實(shí)只想知道 Cookies 是否 enabled,而不關(guān)心 JavaScript,也是有辦法的,我們在另文中討論)要確定用戶(hù)是否打開(kāi) JavaScript,我在 html 中建立了一個(gè)隱藏 from,然后在 onload 事件中調一個(gè) JavaScript 函數,改變該隱藏 form 的值,如果值被改變了,那就說(shuō)明 JavaScript 是打開(kāi)的,否則這個(gè)JavaScript 函數就不會(huì )被調用。(上面兩個(gè)功能我寫(xiě)在一個(gè)函數中)
首先,我們放一個(gè)隱藏 form 在 html 中,用<form>...</form>括起來(lái)。(當然,中間還可以有 username/password 的from)
<FORM>
...
<input type="hidden" name="cookieexists" value="false">
</FORM>
只要它的值是false,就說(shuō)明瀏覽器不支持 JavaScript。注意其初始值是 false。我們的 JavaScript 函數將把這個(gè)值換
為true。在 BODY 中這樣寫(xiě):
<body onload="cc()">
cc()的內容如下:
以下是引用片段:
<script language="JavaScript">
<!-
function cc()
{
/* check for a cookie */
if (document.cookie == "")
{
/* if a cookie is not found - alert user -
change cookieexists field value to false */
alert("COOKIES need to be enabled!");
/* If the user has Cookies disabled an alert will let him know
that cookies need to be enabled to log on.*/
document.Form1.cookieexists.value ="false"
} else {
/* this sets the value to true and nothing else will happen,
the user will be able to log on*/
document.Form1.cookieexists.value ="true"
}
}
/* Set a cookie to be sure that one exists.
Note that this is outside the function*/
document.cookie = ‘killme‘ + escape(‘nothing‘)
// -->
</script>
這個(gè)程序能實(shí)現的功能是:
1 當用戶(hù) JavaScript 打開(kāi),而 Cookies 關(guān)閉時(shí)彈出警告信息
2 當用戶(hù) JavaScript 關(guān)閉,用戶(hù)無(wú)法直接得到檢查結果。(不要忘記,要彈出警告窗口也需要執行 alert 這個(gè)JavaScript 語(yǔ)句,這時(shí)即使檢查出來(lái)都無(wú)法提示),但這時(shí)用戶(hù)的 from 提交后,后臺的程序就會(huì )發(fā)現 cookieexists 這個(gè)域的值是 false,這就說(shuō)明 JavaScript 關(guān)閉了。以后要做什么就不用我說(shuō)了吧?
<script type="text/javascript">
var cookieEnabled=(navigator.cookieEnabled)? true : false
//判斷cookie是否開(kāi)啟
//如果瀏覽器不是ie4+或ns6+
if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){
document.cookie="testcookie"
cookieEnabled=(document.cookie=="testcookie")? true : false
document.cookie="" //erase dummy value
}
//if (cookieEnabled)
//if cookies are enabled on client‘s browser
//do whatever
</script>