跨浏览器常用的方法

//跨浏览器开发中的事件
var EventUtil = {
	addHandler: function(element, type, handler) {
		if (element.addEventListener) {
			element.addEventListener(type, handler, false);
		} else if (element.attachEvent) {
			element.attachEvent("on" + type, handler);
		} else {
			element["on" + type] = handler;
		}
	},
	removeHandler: function(element, type, handler) {
		if (element.removeEventListener) {
			element.removeEventListener(type, handler, false);
		} else if (element.detachEvent) {
			element.detachEvent("on" + type, handler);
		} else {
			element["on" + type] = null;
		}
	},
	getEvent: function(event) {
		return event ? event : window.event;
	},
	getTarget: function(event) {
		return event.target || event.srcElement;
	},
	preventDefault: function(event) {
		if (event.preventDefault) {
			event.preventDefault();
		} else {
			event.returnValue = false;
		}
	},
	stopPropagation: function(event) {
		if (event.stopPropagation) {
			event.stopPropagation();
		} else {
			event.cancelBubble = true;
		}
	},
	//获取相关元素,只有mouseout和mouseover事件有
	getRelatedTarget: function(event) {
		if (event.relatedTarget) {
			return event.relatedTarget;
		} else if (event.toElement) {
			return event.toElement;
		} else if (event.fromElement) {
			return event.fromElement;
		} else {
			return null;
		}

	},
	//获取鼠标事件的点击键   0表示鼠标左键  1表示鼠标滚轮按钮 2表示鼠标右键
	getButton: function(event) {
		if (document.implementation.hasFeature("MouseEvents", "2.0")) {
			return event.button;
		} else {
			switch (event.button) {
				case 0:
				case 1:
				case 3:
				case 5:
				case 7:
					return 0;
				case 2:
				case 6:
					return 2;
				case 4:
					return 1;
			}
		}
	},
	//获取鼠标滚轮增量值
	getWheelDelta: function(event) {
		if (event.wheelDelta) {
			return (client.engine.opera && client.engine.opera < 9.5 ?
				-event.wheelDelta : event.wheelDelta);
		} else {
			return -event.detail * 40;
		}
	},
	//获取键码   获取到键码之后通过使用String.fromCharCode()将键码转化为实际的字符
	getCharCode: function(event) {
		if (typeof event.charCode == "number") {
			return event.charCode;
		} else {
			return event.keyCode;
		}
	},
	//获取剪切板中的内容
	getClipboardText: function(event) {
		var clipboardData = (event.clipboardData || window.clipboardData);
		return clipboardData.getData("text");
	},
	//设置剪切板中的内容
	setClipboardText: function(event, value) {
		if (event.clipboardData) {
			return event.clipboardData.setData("text/plain", value);
		} else if (window.clipboardData) {
			return window.clipboardData.setData("text", value);
		}
	},
};

//浏览器是否支持hashchange事件 url参数列表发生变化时触发
var isSupported = ("onhashchange" in window) && (document.documentMode === undefined || document.documentMode > 7);

//获取页面坐标
var div = document.getElementById("myDiv");
EventUtil.addHandler(div, "click", function(event) {
	event = EventUtil.getEvent(event);
	var pageX = event.pageX,
		pageY = event.pageY;
	if (pageX === undefined) {
		pageX = event.clientX + (document.body.scrollLeft ||
			document.documentElement.scrollLeft);
	}
	if (pageY === undefined) {
		pageY = event.clientY + (document.body.scrollTop ||
			document.documentElement.scrollTop);
	}
	alert("Page coordinates: " + pageX + "," + pageY);
});

//表单项选择部分文本
function selectText(textbox, startIndex, stopIndex) {
	if (textbox.setSelectionRange) {
		textbox.setSelectionRange(startIndex, stopIndex);
	} else if (textbox.createTextRange) {
		var range = textbox.createTextRange();
		range.collapse(true);
		range.moveStart("character", startIndex);
		range.moveEnd("character", stopIndex - startIndex);
		range.select();
	}
	textbox.focus();
}

//跨浏览器向javascript控制台中写入消息
function log(message) {
	if (typeof console == "object") {
		console.log(message);
	} else if (typeof opera == "object") {
		opera.postError(message);
	} else if (typeof java == "object" && typeof java.lang == "object") {
		java.lang.System.out.println(message);
	}
}

//跨浏览器解析XML
function parseXml(xml) {
	var xmldom = null;
	if (typeof DOMParser != "undefined") {
		xmldom = (new DOMParser()).parseFromString(xml, "text/xml");
		var errors = xmldom.getElementsByTagName("parsererror");
		if (errors.length) {
			throw new Error("XML parsing error:" + errors[0].textContent);
		}
	} else if (typeof ActiveXObject != "undefined") {
		xmldom = createDocument();
		xmldom.loadXML(xml);
		if (xmldom.parseError != 0) {
			throw new Error("XML parsing error: " + xmldom.parseError.reason);
		}
	} else {
		throw new Error("No XML parser available.");
	}
	return xmldom;
}

//序列化XML
function serializeXml(xmldom) {
	if (typeof XMLSerializer != "undefined") {
		return (new XMLSerializer()).serializeToString(xmldom);
	} else if (typeof xmldom.xml != "undefined") {
		return xmldom.xml;
	} else {
		throw new Error("Could not serialize XML DOM.");
	}
}

//跨浏览器创建XMLHttpRequest对象
function createXHR() {
	if (typeof XMLHttpRequest != "undefined") {
		return new XMLHttpRequest();
	} else if (typeof ActiveXObject != "undefined") {
		if (typeof arguments.callee.activeXString != "string") {
			var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0",
					"MSXML2.XMLHttp"
				],
				i, len;
			for (i = 0, len = versions.length; i < len; i++) {
				try {
					new ActiveXObject(versions[i]);
					arguments.callee.activeXString = versions[i];
					break;
				} catch (ex) {
					//跳过
				}
			}
		}
		return new ActiveXObject(arguments.callee.activeXString);
	} else {
		throw new Error("No XHR object available.");
	}
}

//跨浏览器的跨域资源共享方案 --CORS
/*
	abort():用于停止正在进行的请求。
  onerror:用于替代 onreadystatechange 检测错误。
 	onload:用于替代 onreadystatechange 检测成功。
 	responseText:用于取得响应内容。
 	send():用于发送请求
	以上方法包含在方法返回值中
*/
function createCORSRequest(method, url) {
	var xhr = new XMLHttpRequest();
	if ("withCredentials" in xhr) {
		xhr.open(method, url, true);
	} else if (typeof XDomainRequest != "undefined") {
		//IE  XDominRequest对象
		xhr = new XDomainRequest();
		xhr.open(method, url);
	} else {
		xhr = null;
	}
	return xhr;
}
var request = createCORSRequest("get", "http://www.somewhere-else.com/page/");
if (request) {
	request.onload = function() {
		//对 request.responseText 进行处理
	};
	request.send();
}

//cookie的读写删基本功能操作
var CookieUtil = {
	get: function(name) {
		var cookieName = encodeURIComponent(name) + "=",
			cookieStart = document.cookie.indexOf(cookieName),
			cookieValue = null;
		if (cookieStart > -1) {
			var cookieEnd = document.cookie.indexOf(";", cookieStart);
			if (cookieEnd == -1) {
				cookieEnd = document.cookie.length;
			}
			cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));
		}
		return cookieValue;
	},
	/*
	cookie 的名称,
	cookie 的值,
	可选的用于指定 cookie 何时应被删除的 Date 对象,
	cookie 的可选的 URL 路径,
	可选的域,
	以及可选的表示是否要添加 secure 标志的布尔值。
	*/
	set: function(name, value, expires, path, domain, secure) {
		var cookieText = encodeURIComponent(name) + "=" +
			encodeURIComponent(value);
		if (expires instanceof Date) {
			cookieText += "; expires=" + expires.toGMTString();
		}
		if (path) {
			cookieText += "; path=" + path;
		}
		if (domain) {
			cookieText += "; domain=" + domain;
		}
		if (secure) {
			cookieText += "; secure";
		}
		document.cookie = cookieText;
	},
	unset: function(name, path, domain, secure) {
		this.set(name, "", new Date(0), path, domain, secure);
	}
};

//兼容只支持 globalStorage 的浏览器
function getLocalStorage() {
	if (typeof localStorage == "object") {
		return localStorage;
	} else if (typeof globalStorage == "object") {
		return globalStorage[location.host];
	} else {
		throw new Error("Local storage not available.");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值