看过Professional.JavaScript.For.Web.Developers这本书的读者应该都觉得这本书讲的很多东西都很实用,很不错。 下面的代码就是书中的一个章节的代码,关于浏览器的检测。
var
sUserAgent
=
navigator.userAgent;
var
fAppVersion
=
parseFloat(navigator.appVersion);


function
compareVersions(sVersion1, sVersion2)
...
{

var aVersion1 = sVersion1.split(".");
var aVersion2 = sVersion2.split(".");

if (aVersion1.length > aVersion2.length) ...{

for (var i=0; i < aVersion1.length - aVersion2.length; i++) ...{
aVersion2.push("0");
}

} else if (aVersion1.length < aVersion2.length) ...{

for (var i=0; i < aVersion2.length - aVersion1.length; i++) ...{
aVersion1.push("0");
}
}

for (var i=0; i < aVersion1.length; i++) ...{

if (aVersion1[i] < aVersion2[i]) ...{
return -1;

} else if (aVersion1[i] > aVersion2[i]) ...{
return 1;
}
}
return 0;

}

var
isOpera
=
sUserAgent.indexOf(
"
Opera
"
)
>
-
1
;
var
isMinOpera4
=
isMinOpera5
=
isMinOpera6
=
isMinOpera7
=
isMinOpera7_5
=
false
;


if
(isOpera)
...
{
var fOperaVersion;

if(navigator.appName == "Opera") ...{
fOperaVersion = fAppVersion;

} else ...{
var reOperaVersion = new RegExp("Opera (/d+/./d+)");
reOperaVersion.test(sUserAgent);
fOperaVersion = parseFloat(RegExp["$1"]);
}

isMinOpera4 = fOperaVersion >= 4;
isMinOpera5 = fOperaVersion >= 5;
isMinOpera6 = fOperaVersion >= 6;
isMinOpera7 = fOperaVersion >= 7;
isMinOpera7_5 = fOperaVersion >= 7.5;
}

var
isKHTML
=
sUserAgent.indexOf(
"
KHTML
"
)
>
-
1
||
sUserAgent.indexOf(
"
Konqueror
"
)
>
-
1
||
sUserAgent.indexOf(
"
AppleWebKit
"
)
>
-
1
;
var
isMinSafari1
=
isMinSafari1_2
=
false
;
var
isMinKonq2_2
=
isMinKonq3
=
isMinKonq3_1
=
isMinKonq3_2
=
false
;


if
(isKHTML)
...
{
isSafari = sUserAgent.indexOf("AppleWebKit") > -1;
isKonq = sUserAgent.indexOf("Konqueror") > -1;


if (isSafari) ...{
var reAppleWebKit = new RegExp("AppleWebKit//(/d+(?:/./d*)?)");
reAppleWebKit.test(sUserAgent);
var fAppleWebKitVersion = parseFloat(RegExp["$1"]);

isMinSafari1 = fAppleWebKitVersion >= 85;
isMinSafari1_2 = fAppleWebKitVersion >= 124;

} else if (isKonq) ...{

var reKonq = new RegExp("Konqueror//(/d+(?:/./d+(?:/./d)?)?)");
reKonq.test(sUserAgent);
isMinKonq2_2 = compareVersions(RegExp["$1"], "2.2") >= 0;
isMinKonq3 = compareVersions(RegExp["$1"], "3.0") >= 0;
isMinKonq3_1 = compareVersions(RegExp["$1"], "3.1") >= 0;
isMinKonq3_2 = compareVersions(RegExp["$1"], "3.2") >= 0;
}
}

var
isIE
=
sUserAgent.indexOf(
"
compatible
"
)
>
-
1
&&
sUserAgent.indexOf(
"
MSIE
"
)
>
-
1
&&
!
isOpera;
var
isMinIE4
=
isMinIE5
=
isMinIE5_5
=
isMinIE6
=
false
;


if
(isIE)
...
{
var reIE = new RegExp("MSIE (/d+/./d+);");
reIE.test(sUserAgent);
var fIEVersion = parseFloat(RegExp["$1"]);

isMinIE4 = fIEVersion >= 4;
isMinIE5 = fIEVersion >= 5;
isMinIE5_5 = fIEVersion >= 5.5;
isMinIE6 = fIEVersion >= 6.0;
}

var
isMoz
=
sUserAgent.indexOf(
"
Gecko
"
)
>
-
1
&&
!
isKHTML;

var
isMinMoz1
=
sMinMoz1_4
=
isMinMoz1_5
=
false
;


if
(isMoz)
...
{
var reMoz = new RegExp("rv:(/d+/./d+(?:/./d+)?)");
reMoz.test(sUserAgent);
isMinMoz1 = compareVersions(RegExp["$1"], "1.0") >= 0;
isMinMoz1_4 = compareVersions(RegExp["$1"], "1.4") >= 0;
isMinMoz1_5 = compareVersions(RegExp["$1"], "1.5") >= 0;
}

var
isNS4
=
!
isIE
&&
!
isOpera
&&
!
isMoz
&&
!
isKHTML
&&
(sUserAgent.indexOf(
"
Mozilla
"
)
==
0
)
&&
(navigator.appName
==
"
Netscape
"
)
&&
(fAppVersion
>=
4.0
&&
fAppVersion
<
5.0
);

var
isMinNS4
=
isMinNS4_5
=
isMinNS4_7
=
isMinNS4_8
=
false
;


if
(isNS4)
...
{
isMinNS4 = true;
isMinNS4_5 = fAppVersion >= 4.5;
isMinNS4_7 = fAppVersion >= 4.7;
isMinNS4_8 = fAppVersion >= 4.8;
}

var
isWin
=
(navigator.platform
==
"
Win32
"
)
||
(navigator.platform
==
"
Windows
"
);
var
isMac
=
(navigator.platform
==
"
Mac68K
"
)
||
(navigator.platform
==
"
MacPPC
"
)
||
(navigator.platform
==
"
Macintosh
"
);

var
isUnix
=
(navigator.platform
==
"
X11
"
)
&&
!
isWin
&&
!
isMac;

var
isWin95
=
isWin98
=
isWinNT4
=
isWin2K
=
isWinME
=
isWinXP
=
false
;
var
isMac68K
=
isMacPPC
=
false
;
var
isSunOS
=
isMinSunOS4
=
isMinSunOS5
=
isMinSunOS5_5
=
false
;


if
(isWin)
...
{
isWin95 = sUserAgent.indexOf("Win95") > -1
|| sUserAgent.indexOf("Windows 95") > -1;
isWin98 = sUserAgent.indexOf("Win98") > -1
|| sUserAgent.indexOf("Windows 98") > -1;
isWinME = sUserAgent.indexOf("Win 9x 4.90") > -1
|| sUserAgent.indexOf("Windows ME") > -1;
isWin2K = sUserAgent.indexOf("Windows NT 5.0") > -1
|| sUserAgent.indexOf("Windows 2000") > -1;
isWinXP = sUserAgent.indexOf("Windows NT 5.1") > -1
|| sUserAgent.indexOf("Windows XP") > -1;
isWinNT4 = sUserAgent.indexOf("WinNT") > -1
|| sUserAgent.indexOf("Windows NT") > -1
|| sUserAgent.indexOf("WinNT4.0") > -1
|| sUserAgent.indexOf("Windows NT 4.0") > -1
&& (!isWinME && !isWin2K && !isWinXP);
}


if
(isMac)
...
{
isMac68K = sUserAgent.indexOf("Mac_68000") > -1
|| sUserAgent.indexOf("68K") > -1;
isMacPPC = sUserAgent.indexOf("Mac_PowerPC") > -1
|| sUserAgent.indexOf("PPC") > -1;
}


if
(isUnix)
...
{
isSunOS = sUserAgent.indexOf("SunOS") > -1;


if (isSunOS) ...{
var reSunOS = new RegExp("SunOS (/d+/./d+(?:/./d+)?)");
reSunOS.test(sUserAgent);
isMinSunOS4 = compareVersions(RegExp["$1"], "4.0") >= 0;
isMinSunOS5 = compareVersions(RegExp["$1"], "5.0") >= 0;
isMinSunOS5_5 = compareVersions(RegExp["$1"], "5.5") >= 0;
}
}
































































































































































































