@buession/prototype
Version:
A native object extension framework for Javascript.
128 lines (127 loc) • 4.06 kB
JavaScript
/**
* Window 对象扩展
*/
var isMobile = ["Android", "iPhone", "iPod", "Windows Phone", "Mobile", "Coolpad", "mmp", "SmartPhone", "midp", "wap", "xoom", "Symbian", "J2ME", "Blackberry", "Wince"].some(value => navigator.userAgent.exists(value));
var isChrome = /\(KHTML, like Gecko\) Chrome\//.test(navigator.userAgent);
var isFirefox = navigator.userAgent.exists("Firefox");
var isMozilla = navigator.userAgent.exists("Mozilla");
var isEdge = navigator.userAgent.exists("Edge");
var isMSIE = navigator.userAgent.exists("MSIE") && navigator.userAgent.exists("compatible");
var isOpera = navigator.userAgent.exists("Opera");
var isSafari = navigator.userAgent.exists("Safari");
var isNetscape = /Netscape([\d]*)\/([^\s]+)/i.test(navigator.userAgent);
Object.defineProperty(window, "browser", {
value: {
userAgent: navigator.userAgent,
name: navigator.appName,
version: navigator.appVersion,
cookieEnabled: navigator.cookieEnabled,
language: navigator.language,
languages: navigator.languages,
isMobile: isMobile,
isChrome: isChrome,
isFirefox: isFirefox,
isMozilla: isMozilla,
isEdge: isEdge,
isMSIE: isMSIE,
isOpera: isOpera,
isSafari: isSafari,
isNetscape: isNetscape
},
configurable: true,
writable: false
});
/**
* 将字符串复制到剪贴板
*
* @param str 字符串
*/
Window.prototype.copy = function (str) {
try {
if (Object.isObject(this.clipboardData) === true) {
this.clipboardData.setData("text", str);
} else {
var fakeElement = document.createElement("textarea");
fakeElement.style.border = "none";
fakeElement.style.margin = "0";
fakeElement.style.padding = "0";
fakeElement.style.position = "absolute";
fakeElement.style.top = "-9999px";
fakeElement.style.left = "-9999px";
fakeElement.value = str;
fakeElement.setAttribute("readonly", "");
document.body.appendChild(fakeElement);
fakeElement.setSelectionRange(0, str.length);
fakeElement.select();
document.execCommand("copy");
fakeElement.remove();
}
} catch (e) {
console.error(e);
}
};
/**
* 延时执行
*
* @param func 延时执行方法
* @param wait 延时时长(单位:毫秒)
* @param args 方法参数
*
* @return 方法执行结果
*/
Window.prototype.delay = function (func, wait) {
var delayFunc = function delayFunc(func, wait) {
for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {
args[_key2 - 2] = arguments[_key2];
}
if (typeof func !== "function") {
throw new TypeError("Expected a function");
}
return setTimeout(function () {
func.apply(undefined, args);
}, wait);
};
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
return delayFunc(func, wait || 0, args);
};
/**
* 获取所有的请求参数及值
*
* @return 所有的请求参数及值
*/
Location.prototype.getParameters = function () {
var queryString = this.search;
var parameters = {};
if (queryString.indexOf("?") !== -1) {
queryString = queryString.substring(1);
var parts = queryString.split("&");
for (var i = 0; i < parts.length; i++) {
var temp = parts[i].split("=");
var val = temp.length == 2 ? encodeURIComponent(temp[1]) : "";
if (Object.isUndefined(parameters[temp[0]])) {
parameters[temp[0]] = val;
} else {
if (Object.isArray(parameters[temp[0]]) === false) {
var oldVal = parameters[temp[0]];
delete parameters[temp[0]];
parameters[temp[0]] = [oldVal];
}
parameters[temp[0]].push(val);
}
}
}
return parameters;
};
/**
* 获取指定请求参数的值
*
* @param name 参数名
* @return 指定请求参数的值
*/
Location.prototype.getParameter = function (name) {
var parameters = this.getParameters();
return parameters[name];
};
;