跨浏览器基础事件
复制代码 代码如下:
//跨浏览器添加事件
function addevent(obj, type, fn) {
if (obj.addeventlistener) {
obj.addeventlistener(type, fn, false);
} else if (obj.attachevent) {
obj.attachevent('on' + type, function () {
fn.call(obj);
});
}
}
//跨浏览器基础事件
function removeevent(obj, type, fn) {
if (obj.removeeventlistener) {
obj.removeeventlistener(type, fn, false);
} else if (obj.detachevent) {
obj.detachevent('on' + type, fn);
}
}
//跨浏览器阻止默认行为
function predef(evt) {
var e = evt || window.event;
if (e.preventdefault) {
e.preventdefault();
} else {
e.returnvalue = false;
}
}
//跨浏览器获取目标对象
function gettarget(evt) {
if (evt.target) { //w3c
return evt.target;
} else if (window.event.srcelement) { //ie
return window.event.srcelement;
}
}
//跨浏览器获取字符编码
function getcharcode(evt) {
var e = evt || window.event;
if (typeof e.charcode == 'number') {
return e.charcode;
} else {
return e.keycode;
}
}
浏览器检测
复制代码 代码如下:
var client = function(){
//rendering engines
var engine = {
ie: 0,
gecko: 0,
webkit: 0,
khtml: 0,
opera: 0,
//complete version
ver: null
};
//browsers
var browser = {
//browsers
ie: 0,
firefox: 0,
safari: 0,
konq: 0,
opera: 0,
chrome: 0,
//specific version
ver: null
};
//platform/device/os
var system = {
win: false,
mac: false,
x11: false,
//mobile devices
iphone: false,
ipod: false,
ipad: false,
ios: false,
android: false,
nokian: false,
winmobile: false,
//game systems
wii: false,
ps: false
};
//detect rendering engines/browsers
var ua = navigator.useragent;
if (window.opera){
engine.ver = browser.ver = window.opera.version();
engine.opera = browser.opera = parsefloat(engine.ver);
} else if (/applewebkit\/(\s+)/.test(ua)){
engine.ver = regexp[$1];
engine.webkit = parsefloat(engine.ver);
//figure out if it's chrome or safari
if (/chrome\/(\s+)/.test(ua)){
browser.ver = regexp[$1];
browser.chrome = parsefloat(browser.ver);
} else if (/version\/(\s+)/.test(ua)){
browser.ver = regexp[$1];
browser.safari = parsefloat(browser.ver);
} else {
//approximate version
var safariversion = 1;
if (engine.webkit safariversion = 1;
} else if (engine.webkit safariversion = 1.2;
} else if (engine.webkit safariversion = 1.3;
} else {
safariversion = 2;
}
browser.safari = browser.ver = safariversion;
}
} else if (/khtml\/(\s+)/.test(ua) || /konqueror\/([^;]+)/.test(ua)){
engine.ver = browser.ver = regexp[$1];
engine.khtml = browser.konq = parsefloat(engine.ver);
} else if (/rv:([^\)]+)\) gecko\/\d{8}/.test(ua)){
engine.ver = regexp[$1];
engine.gecko = parsefloat(engine.ver);
//determine if it's firefox
if (/firefox\/(\s+)/.test(ua)){
browser.ver = regexp[$1];
browser.firefox = parsefloat(browser.ver);
}
} else if (/msie ([^;]+)/.test(ua)){
engine.ver = browser.ver = regexp[$1];
engine.ie = browser.ie = parsefloat(engine.ver);
}
//detect browsers
browser.ie = engine.ie;
browser.opera = engine.opera;
//detect platform
var p = navigator.platform;
system.win = p.indexof(win) == 0;
system.mac = p.indexof(mac) == 0;
system.x11 = (p == x11) || (p.indexof(linux) == 0);
//detect windows operating systems
if (system.win){
if (/win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/.test(ua)){
if (regexp[$1] == nt){
switch(regexp[$2]){
case 5.0:
system.win = 2000;
break;
case 5.1:
system.win = xp;
break;
case 6.0:
system.win = vista;
break;
case 6.1:
system.win = 7;
break;
default:
system.win = nt;
break;
}
} else if (regexp[$1] == 9x){
system.win = me;
} else {
system.win = regexp[$1];
}
}
}
//mobile devices
system.iphone = ua.indexof(iphone) > -1;
system.ipod = ua.indexof(ipod) > -1;
system.ipad = ua.indexof(ipad) > -1;
system.nokian = ua.indexof(nokian) > -1;
//windows mobile
if (system.win == ce){
system.winmobile = system.win;
} else if (system.win == ph){
if(/windows phone os (\d+.\d+)/.test(ua)){;
system.win = phone;
system.winmobile = parsefloat(regexp[$1]);
}
}
//determine ios version
if (system.mac && ua.indexof(mobile) > -1){
if (/cpu (?:iphone )?os (\d+_\d+)/.test(ua)){
system.ios = parsefloat(regexp.$1.replace(_, .));
} else {
system.ios = 2; //can't really detect - so guess
}
}
//determine android version
if (/android (\d+\.\d+)/.test(ua)){
system.android = parsefloat(regexp.$1);
}
//gaming systems
system.wii = ua.indexof(wii) > -1;
system.ps = /playstation/i.test(ua);
//return it
return {
engine: engine,
browser: browser,
system: system
};
}();
判断浏览器的名称、版本号、操作系统
复制代码 代码如下:
var browserdetect = {
init: function () {
this.browser = this.searchstring(this.databrowser) || an unknown browser;
this.version = this.searchversion(navigator.useragent)
|| this.searchversion(navigator.appversion)
|| an unknown version;
this.os = this.searchstring(this.dataos) || an unknown os;
},
searchstring: function (data) {
for (var i=0;ivar datastring = data[i].string;
var dataprop = data[i].prop;
this.versionsearchstring = data[i].versionsearch || data[i].identity;
if (datastring) {
if (datastring.indexof(data[i].substring) != -1)
return data[i].identity;
}
else if (dataprop)
return data[i].identity;
}
},
searchversion: function (datastring) {
var index = datastring.indexof(this.versionsearchstring);
if (index == -1) return;
return parsefloat(datastring.substring(index+this.versionsearchstring.length+1));
},
databrowser: [
{
string: navigator.useragent,
substring: chrome,
identity: chrome
},
{ string: navigator.useragent,
substring: omniweb,
versionsearch: omniweb/,
identity: omniweb
},
{
string: navigator.vendor,
substring: apple,
identity: safari,
versionsearch: version
},
{
prop: window.opera,
identity: opera,
versionsearch: version
},
{
string: navigator.vendor,
substring: icab,
identity: icab
},
{
string: navigator.vendor,
substring: kde,
identity: konqueror
},
{
string: navigator.useragent,
substring: firefox,
identity: firefox
},
{
string: navigator.vendor,
substring: camino,
identity: camino
},
{ // for newer netscapes (6+)
string: navigator.useragent,
substring: netscape,
identity: netscape
},
{
string: navigator.useragent,
substring: msie,
identity: internet explorer,
versionsearch: msie
},
{
string: navigator.useragent,
substring: gecko,
identity: mozilla,
versionsearch: rv
},
{ // for older netscapes (4-)
string: navigator.useragent,
substring: mozilla,
identity: netscape,
versionsearch: mozilla
}
],
dataos : [
{
string: navigator.platform,
substring: win,
identity: windows
},
{
string: navigator.platform,
substring: mac,
identity: mac
},
{
string: navigator.useragent,
substring: iphone,
identity: iphone/ipod
},
{
string: navigator.platform,
substring: linux,
identity: linux
}
]
};
browserdetect.init();
alert(browserdetect.browser); //名称
alert(browserdetect.version); //版本
alert(browserdetect.os) //系统