(function (window) { window.console = window.console || (function () { var c = {}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile = c.clear = c.exception = c.trace = c.assert = function () { }; return c; })(); //String对象的拓展 if (typeof String.prototype.trim == 'undefined') { String.prototype.trim = function () { var str = this, whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000'; for (var i = 0, len = str.length; i < len; i++) { if (whitespace.indexOf(str.charAt(i)) == -1) { str = str.substring(i); break; } } for (i = str.length - 1; i >= 0; i--) { if (whitespace.indexOf(str.charAt(i)) == -1) { str = str.substring(0, i + 1); break; } } return whitespace.indexOf(str.charAt(0)) == -1 ? str : ''; } } if (typeof String.prototype.ltrim == 'undefined') { String.prototype.ltrim = function () { return this.replace(/(^\s*)/g, ""); } } if (typeof String.prototype.rtrim == 'undefined') { String.prototype.rtrim = function () { return this.replace(/(\s*$)/g, ""); } } if (typeof String.prototype.htmlEncode == 'undefined') { String.prototype.htmlEncode = function (encodeNewLine) {//encodeNewLine:是否encode换行符 var s = this; s = s.replace(/&/g, '&'); s = s.replace(//g, '>'); s = s.replace(/'/g, '"'); if (encodeNewLine) { s = s.replace(/\r\n/g, '
'); s = s.replace(/\r/g, '
'); s = s.replace(/\n/g, '
'); } return s; } } if (typeof String.prototype.htmlDecode == 'undefined') { String.prototype.htmlDecode = function (decodeNewLine) {//decodeNewLine:是否decode换行符 var s = this; if (decodeNewLine) { s = s.replace(//gi, '\r\n'); } s = s.replace(/"/g, '\''); s = s.replace(/>/g, '>'); s = s.replace(/</g, '<'); s = s.replace(/&/g, '&'); return s; } } if (typeof String.prototype.startsWith == 'undefined') { String.prototype.startsWith = function (start, ignoreCase) {//start:欲判断字符, ignoreCase:是否忽略大小写 var s = this; if (ignoreCase) { s = s.toLowerCase(); end = end.toLowerCase(); } if (s.substr(0, start.length) == start) return true; return false; } } if (typeof String.prototype.endsWith == 'undefined') { String.prototype.endsWith = function (end, ignoreCase) {//end:欲判断字符, ignoreCase:是否忽略大小写 var s = this; if (ignoreCase) { s = s.toLowerCase(); end = end.toLowerCase(); } if (s.substr(s.length - end.length) == end) return true; return false; } } //Array对象的拓展 if (typeof Array.prototype.clear == 'undefined') { Array.prototype.clear = function () { this.length = 0; } } if (typeof Array.prototype.insertAt == 'undefined') { Array.prototype.insertAt = function (index, value) { this.splice(index, 0, value); } } if (typeof Array.prototype.removeAt == 'undefined') { Array.prototype.removeAt = function (index) { /// ///指定位置移除 /// /// 位置 this.splice(index, 1); } } if (typeof Array.prototype.remove == 'undefined') { Array.prototype.remove = function (value) { var index = this.indexOf(value); if (index >= 0) { this.removeAt(index); } } } if (typeof Array.prototype.indexOf == 'undefined') { Array.prototype.indexOf = function (obj, start) { for (var i = (start || 0), j = this.length; i < j; i++) { if (this[i] == obj) { return i; } } return -1; } } if (typeof Array.prototype.deleteRepeat == 'undefined') { Array.prototype.deleteRepeat = function () { /// /// 删除数组里的重复项 /// /// var retArr = [], tempObj = {}; for (var i = 0, tmpItem; (tmpItem = this[i]) != null; i++) { if (!tempObj[tmpItem]) { retArr.push(tmpItem); tempObj[tmpItem] = true; } } return retArr; } } if (typeof Date.prototype.addDays == 'undefined') { Date.prototype.addDays = function (days) { /// /// 当前时间增加天数 /// /// 需要增加天数 var dat = new Date(this.valueOf()); dat.setDate(dat.getDate() + days); return dat; } } jsUtils = { selectedRange: function (el) { /// /// 选中内容 /// eg: selectedRange(document.getElementById('123')); /// /// 需要选中对象 var body = document.body, range, sel; if (document.createRange && window.getSelection) { //Range 对象表示文档的连续范围区域,如用户在浏览器窗口中用鼠标拖动选中的区域。 //selection是对当前激活选中区(即高亮文本)进行操作。 range = document.createRange(); sel = window.getSelection(); sel.removeAllRanges(); try { range.selectNodeContents(el); sel.addRange(range); } catch (e) { range.selectNode(el); sel.addRange(range); } } else if (body.createTextRange) { range = body.createTextRange(); range.moveToElementText(el); range.select(); } }, delegate: function (client, clientMethod) { /// /// JavaScript 委托 /// /// 目标对象 /// 委托方法 return function () { return clientMethod.apply(client, arguments); } }, isString: function (obj) { /// ///判断是不是String类型 /// /// 对象 /// 是不是String类型 return (obj != null) && (obj != undefined) && (typeof obj == 'string') && (obj.constructor == String); }, isNumber: function (obj) { /// /// 判断是否是数字 /// /// 对象 /// 是否是数字 return (typeof obj == 'number') && (obj.constructor == Number); }, isDate: function (obj) { /// /// 判断是否是日期 /// /// 对象 /// 是否是日期 return obj && (typeof obj == 'object') && (obj.constructor == Date); }, isArray: function (obj) { /// /// 判断是否是数组 /// /// 对象 /// 是否是数组 return obj && (typeof obj == 'object') && (obj.constructor == Array); }, isObject: function (obj) { /// /// 判断是否是对象 /// /// 对象 /// 是否是对象 return obj && (typeof obj == 'object') && (obj.constructor == Object) }, isPc: function () { /// /// 判断是否是pc端浏览 /// /// var userAgentInfo = navigator.userAgent; var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; } } return flag; }, getHost: function (url) { /// /// 获取域名主机 /// /// 域名 var host = "null"; if (typeof url == "undefined" || null == url) { url = window.location.href; } var regex = /^\w+\:\/\/([^\/]*).*/; var match = url.match(regex); if (typeof match != "undefined" && null != match) { host = match[1]; } return host; }, addFavorite: function (url, title) { /// /// 加入收藏夹 /// /// /// try { window.external.addFavorite(url, title); } catch (e) { try { window.sidebar.addPanel(title, url, ""); } catch (e) { alert("加入收藏失败,请使用Ctrl+D进行添加"); } } }, getCurrentPageUrl: function () { /// ///获取当前路径 /// var currentPageUrl = ""; if (typeof this.href === "undefined") { currentPageUrl = document.location.toString().toLowerCase(); } else { currentPageUrl = this.href.toString().toLowerCase(); } return currentPageUrl; }, setHomepage: function () { /// /// 设为首页 /// if (document.all) { document.body.style.behavior = 'url(#default#homepage)'; document.body.setHomePage('http://***'); } else if (window.sidebar) { if (window.netscape) { try { netscape.security.PrivilegeManager .enablePrivilege("UniversalXPConnect"); } catch (e) { alert("该操作被浏览器拒绝,如果想启用该功能,请在地址栏内输入 about:config,然后将项 signed.applets.codebase_principal_support 值该为true"); } } var prefs = Components.classes['@mozilla.org/preferences-service;1'] .getService(Components.interfaces.nsIPrefBranch); prefs.setCharPref('browser.startup.homepage', 'http://***'); } }, getExplorerInfo: function () { /// /// 返回浏览器版本 /// 返回一个对象,对象属性:type,version /// var explorer = window.navigator.userAgent.toLowerCase(); // ie if (explorer.indexOf("msie") >= 0) { var ver = explorer.match(/msie ([\d.]+)/)[1]; return { type: "IE", version: ver }; } // firefox else if (explorer.indexOf("firefox") >= 0) { var ver = explorer.match(/firefox\/([\d.]+)/)[1]; return { type: "Firefox", version: ver }; } // Chrome else if (explorer.indexOf("chrome") >= 0) { var ver = explorer.match(/chrome\/([\d.]+)/)[1]; return { type: "Chrome", version: ver }; } // Opera else if (explorer.indexOf("opera") >= 0) { var ver = explorer.match(/opera.([\d.]+)/)[1]; return { type: "Opera", version: ver }; } // Safari else if (explorer.indexOf("Safari") >= 0) { var ver = explorer.match(/version\/([\d.]+)/)[1]; return { type: "Safari", version: ver }; } }, loadScript: function (url, callback) { /// /// 动态加载js /// /// js路径 /// 回调函数 var script = document.createElement("script") script.type = "text/javascript"; script.src = url; if (script.readyState) { //IE script.onreadystatechange = function () { if (script.readyState == "loaded" || script.readyState == "complete") { script.onreadystatechange = null; callback(); } }; } else { //Others script.onload = function () { callback(); }; } document.body.appendChild(script); } }; jsUtils.check = { isIP: function (strIP) { /// /// 是否是IP地址 /// /// IP地址 /// if (this.isNull(strIP)) return false; var re = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/g //匹配IP地址的正则表达式 if (re.test(strIP)) { if (RegExp.$1 < 256 && RegExp.$2 < 256 && RegExp.$3 < 256 && RegExp.$4 < 256) return true; } return false; }, isNull: function (str) { /// /// 检查输入字符串是否为空或者全部都是空格 /// /// 字符串 /// 如果全是空返回true,否则返回false if (str == "") return true; var regu = "^[ ]+$"; var re = new RegExp(regu); return re.test(str); }, isInteger: function (str) { /// /// 检查输入对象的值是否符合整数格式 /// /// 输入的字符串 /// 如果通过验证返回true,否则返回false var regu = /^[-]{0,1}[0-9]{1,}$/; return regu.test(str); }, isNumber: function (s) { /// /// 检查输入字符串是否符合正整数格式 /// /// 输入的字符串 /// 如果通过验证返回true,否则返回false var regu = "^[0-9]+$"; var re = new RegExp(regu); if (s.search(re) != -1) { return true; } else { return false; } }, isDecimal: function (str) { /// ///检查输入字符串是否是带小数的数字格式,可以是负数 /// /// 输入的字符串 /// 通过验证返回true,否则返回false if (this.isInteger(str)) return true; var re = /^[-]{0,1}(\d+)[\.]+(\d+)$/; if (re.test(str)) { if (RegExp.$1 == 0 && RegExp.$2 == 0) return false; return true; } else { return false; } }, isPort: function (str) { /// /// 检查输入对象的值是否符合端口号格式 /// /// 输入的字符串 /// 通过验证返回true,否则返回false return (this.isNumber(str) && str < 65536); }, isEmail: function (str) { /// /// 检查输入对象的值是否符合E-Mail格式 /// /// 输入的字符串 /// 通过验证返回true,否则返回false var myReg = /^[-_A-Za-z0-9]+@([_A-Za-z0-9]+\.)+[A-Za-z0-9]{2,3}$/; if (myReg.test(str)) return true; return false; }, isMoney: function (s) { /// /// 检查输入字符串是否符合金额格式格式定义为带小数的正数,小数点后最多三位 /// /// 输入的字符串 /// 通过验证返回true,否则返回false var regu = "^[0-9]+[\.][0-9]{0,3}$"; var re = new RegExp(regu); if (re.test(s)) { return true; } else { return false; } }, isNumberOr_Letter: function (s) { /// /// 检查输入字符串是否只由英文字母和数字和下划线组成 /// /// 输入的字符串 /// 通过验证返回true,否则返回false var regu = "^[0-9a-zA-Z\_]+$"; var re = new RegExp(regu); if (re.test(s)) { return true; } else { return false; } }, isNumberOrLetter: function (s) { /// /// 检查输入字符串是否只由英文字母和数字组成 /// /// 输入的字符串 /// 通过验证返回true,否则返回false var regu = "^[0-9a-zA-Z]+$"; var re = new RegExp(regu); if (re.test(s)) { return true; } else { return false; } }, isChinaOrNumbOrLett: function (s) { /// /// 检查输入字符串是否只由汉字、字母、数字组成 /// /// 输入的字符串 /// 通过验证返回true,否则返回false var regu = "^[0-9a-zA-Z\u4e00-\u9fa5]+$"; var re = new RegExp(regu); if (re.test(s)) { return true; } else { return false; } }, isDate: function (date, fmt) { /// /// 判断是否是日期 /// /// 日期 /// 日期格式 /// 通过验证返回true,否则返回false if (fmt == null) fmt = "yyyyMMdd"; var yIndex = fmt.indexOf("yyyy"); if (yIndex == -1) return false; var year = date.substring(yIndex, yIndex + 4); var mIndex = fmt.indexOf("MM"); if (mIndex == -1) return false; var month = date.substring(mIndex, mIndex + 2); var dIndex = fmt.indexOf("dd"); if (dIndex == -1) return false; var day = date.substring(dIndex, dIndex + 2); if (!isNumber(year) || year > "2100" || year < "1900") return false; if (!isNumber(month) || month > "12" || month < "01") return false; if (day > getMaxDay(year, month) || day < "01") return false; return true; }, isLastMatch: function (str1, str2) { /// /// 字符1是否以字符串2结束 /// /// 字符串 /// 被包含的字符串 /// 如果通过验证返回true,否则返回false var index = str1.lastIndexOf(str2); if (str1.length == index + str2.length) return true; return false; }, isFirstMatch: function (str1, str2) { /// /// 字符1是否以字符串2开始 /// /// 字符串 /// 被包含的字符串 /// 如果通过验证返回true,否则返回false var index = str1.indexOf(str2); if (index == 0) return true; return false; } }; jsUtils.mobile = { isMobile: function () { /// /// 判断是否移动设备 /// /// if (typeof this._isMobile === 'boolean') { return this._isMobile; } var screenWidth = this.getScreenWidth(); var fixViewPortsExperiment = rendererModel.runningExperiments.FixViewport || rendererModel.runningExperiments.fixviewport; var fixViewPortsExperimentRunning = fixViewPortsExperiment && (fixViewPortsExperiment.toLowerCase() === "new"); if (!fixViewPortsExperiment) { if (!this.isAppleMobileDevice()) { screenWidth = screenWidth / window.devicePixelRatio; } } var isMobileScreenSize = screenWidth < 600; var isMobileUserAgent = false; this._isMobile = isMobileScreenSize && this.isTouchScreen(); return this._isMobile; }, isMobileUserAgent: function () { /// /// 判断是否移动设备访问 /// /// return (/iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i .test(window.navigator.userAgent.toLowerCase())); }, isAppleMobileDevice: function () { /// /// 判断是否苹果移动设备访问 /// return (/iphone|ipod|ipad|Macintosh/i.test(navigator.userAgent .toLowerCase())); }, isAndroidMobileDevice: function () { /// /// 判断是否安卓移动设备访问 /// return (/android/i.test(navigator.userAgent.toLowerCase())); }, isTouchScreen: function () { /// /// 判断是否Touch屏幕 /// /// return (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch); }, isNewChromeOnAndroid: function () { /// /// 判断是否在安卓上的谷歌浏览器 /// if (this.isAndroidMobileDevice()) { var userAgent = navigator.userAgent.toLowerCase(); if ((/chrome/i.test(userAgent))) { var parts = userAgent.split('chrome/'); var fullVersionString = parts[1].split(" ")[0]; var versionString = fullVersionString.split('.')[0]; var version = parseInt(versionString); if (version >= 27) { return true; } } } return false; }, isViewportOpen: function () { /// /// 判断是否打开视窗 /// /// return !!document.getElementById('wixMobileViewport'); }, getInitZoom: function () { /// /// 获取移动设备初始化大小 /// if (!this._initZoom) { var screenWidth = Math.min(screen.height, screen.width); if (this.isAndroidMobileDevice() && !this.isNewChromeOnAndroid()) { screenWidth = screenWidth / window.devicePixelRatio; } this._initZoom = screenWidth / document.body.offsetWidth; } return this._initZoom; }, getZoom: function () { /// /// 获取移动设备最大化大小 /// var screenWidth = (Math.abs(window.orientation) === 90) ? Math.max(screen.height, screen.width) : Math.min(screen.height, screen.width); if (this.isAndroidMobileDevice() && !this.isNewChromeOnAndroid()) { screenWidth = screenWidth / window.devicePixelRatio; } var FixViewPortsExperiment = rendererModel.runningExperiments.FixViewport || rendererModel.runningExperiments.fixviewport; var FixViewPortsExperimentRunning = FixViewPortsExperiment && (FixViewPortsExperiment === "New" || FixViewPortsExperiment === "new"); if (FixViewPortsExperimentRunning) { return screenWidth / window.innerWidth; } else { return screenWidth / document.body.offsetWidth; } }, getScreenWidth: function () { /// /// 获取移动设备屏幕宽度 /// /// var smallerSide = Math.min(screen.width, screen.height); var fixViewPortsExperiment = rendererModel.runningExperiments.FixViewport || rendererModel.runningExperiments.fixviewport; var fixViewPortsExperimentRunning = fixViewPortsExperiment && (fixViewPortsExperiment.toLowerCase() === "new"); if (fixViewPortsExperiment) { if (this.isAndroidMobileDevice() && !this.isNewChromeOnAndroid()) { smallerSide = smallerSide / window.devicePixelRatio; } } return smallerSide; } }; jsUtils.string = { cutstr: function (str, length) { /// /// 字符串长度截取 /// /// 字符串 /// 长度 var temp; var icount = 0; var patrn = /[^\x00-\xff]/; var strre = ""; for (var i = 0; i < str.length; i++) { if (icount < len - 1) { temp = str.substr(i, 1); if (patrn.exec(temp) == null) { icount = icount + 1; } else { icount = icount + 2; } strre += temp; } else { break; } } return strre + "..."; }, isNullOrEmpty: function (data) { /// /// 判断NULL或者空 /// 参考:http://www.sitepoint.com/testing-for-empty-values/ /// /// 需要判断数据 /// 是否是NULL或者空 if (typeof (data) == 'number' || typeof (data) == 'boolean') { return false; } if (typeof (data) == 'undefined' || data == null) { return true; } if (typeof (data.length) != 'undefined') { return data.length == 0; } var count = 0; for (var i in data) { if (data.hasOwnProperty(i)) { count++; } } return count == 0; } }; jsUtils.datetime = { CONSTANT: { DEFAULT_FORMAT: 'yyyy-MM-dd hh:mm:ss' }, formart: function (date, format) { /// /// 时间格式化 /// 参考:http://yaniswang.com/frontend/2013/02/16/dateformat-performance/ /// /// /// /// if (date instanceof Date) { var map = { "M": date.getMonth() + 1, //月份 "d": date.getDate(), //日 "h": date.getHours(), //小时 "m": date.getMinutes(), //分 "s": date.getSeconds(), //秒 "q": Math.floor((date.getMonth() + 3) / 3), //季度 "S": date.getMilliseconds() //毫秒 }; format = format || this.CONSTANT.DEFAULT_FORMAT; format = format.replace(/([yMdhmsqS])+/g, function (all, t) { var v = map[t]; if (v !== undefined) { if (all.length > 1) { v = '0' + v; v = v.substr(v.length - 2); } return v; } else if (t == 'y') { return (date.getFullYear() + '').substr(4 - all.length); } return all; }); return format; } }, now: function (format) { /// /// 获取当前时间 /// /// 时间格式化类型,默认:yyyy-MM-dd hh:mm:ss /// 当前时间 return this.formart(new Date(), format); }, parseTime: function (time) { /// /// 将字符串时间转换时间json /// eg:parseTime("12:00 AM"); // {hh: 0, mm: 0} /// parseTime("12:00 PM"); // {hh: 12, mm: 0} /// parseTime("01:00 PM"); // {hh: 13, mm: 0} /// parseTime("23:00"); // {hh: 23, mm: 0} /// /// 字符串时间 var _part = time.match(/(\d+):(\d+)(?: )?(am|pm)?/i); var _hh = parseInt(_part[1], 10); var _mm = parseInt(_part[2], 10); var _ap = _part[3] ? _part[3].toUpperCase() : null; if (_ap === "AM") { if (_hh == 12) { _hh = 0; } } if (_ap === "PM") { if (_hh != 12) { hh += 12; } } return { hh: _hh, mm: _mm }; }, parseDateTime: function (date) { /// /// 将日期字符串转换成时间 /// eg:parseDateTime('2006-1-1') return new Date(2006,0,1) /// parseDateTime('2006-1-1 15:14:16') return new Date(2006,0,1,15,14,16) /// parseDate('2006-1-1 15:14:16.254') return new Date(2006,0,1,15,14,16,254) /// parseDate('不正确的格式') retrun null /// /// 时间 date if (typeof date == 'string') { var results = date.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) *$/); if (results && results.length > 3) return new Date(parseInt(results[1]), parseInt(results[2]) - 1, parseInt(results[3])); results = date.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2}) *$/); if (results && results.length > 6) return new Date(parseInt(results[1]), parseInt(results[2]) - 1, parseInt(results[3]), parseInt(results[4]), parseInt(results[5]), parseInt(results[6])); results = date.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}) *$/); if (results && results.length > 7) return new Date(parseInt(results[1]), parseInt(results[2]) - 1, parseInt(results[3]), parseInt(results[4]), parseInt(results[5]), parseInt(results[6]), parseInt(results[7])); } return null; }, addDays: function (date, days, format) { /// /// 增加天数 /// eg:jsUtils.datetime.addDays(new Date(), 2); /// /// 目标日期 /// 增加天数 /// 格式 var _newDate = new Date(date.getTime() + days * 24 * 60 * 60 * 1000); return this.formart(_newDate, format); }, addHours: function (date, hour, format) { /// /// 增加小时 /// eg:jsUtils.datetime.addHours(new Date(), 2); /// /// 目标日期 /// 增加天数 /// 格式 var _newDate = new Date(date.getTime() + hour * 60 * 60 * 1000); return this.formart(_newDate, format); }, getFriendlyString: function (time) { /// /// 获取时间差友好提示 /// /// date /// 时间差友好提示 var _friendlyDate = ''; var _nowdate = new Date(); var _now = _nowdate.getTime(); var _delay = _now - time; var _year = 365 * 24 * 60 * 60 * 1000, _day = 24 * 60 * 60 * 1000, _hour = 60 * 60 * 1000; if (_delay >= _year) { _delay = (_delay / _year); var _year = Math.floor(_delay); if (_year == 1) { _friendlyDate = "去年"; } else if (_year == 2) { _friendlyDate = "前年"; } else { _friendlyDate = _year + "年前"; } } else if (_delay >= _day) { _delay = (_delay / _day); var _day = Math.floor(_delay); if (_day == 1) { _friendlyDate = "昨天"; } else if (_day == 2) { _friendlyDate = "前天"; } else { _friendlyDate = _day + "天前"; } } else if (_delay >= (_hour)) { _delay = (_delay / _hour) _friendlyDate = Math.floor(_delay) + "小时前"; } else if (_delay >= (60 * 1000)) { _delay = (_delay / (60 * 1000)) _friendlyDate = Math.floor(_delay) + "分钟前"; } else if (_delay >= (1000)) { _delay = (_delay / (1000)) _friendlyDate = Math.floor(_delay) + "秒前"; } else { _friendlyDate = "刚刚"; } return _friendlyDate; } }; jsUtils.log = { CONSTANT: { DIALOG_WITH: 400, DIALOG_HIGHT: 200 }, add: function (message) { /// /// 添加窗口日志信息 /// /// 日志信息 if (!this.window_ || this.window_.closed) { var win = window.open("", null, "width=600,height=200,scrollbars=yes,resizable=yes,status=no,location=no,menubar=no,toolbar=no"); if (!win) return; var doc = win.document; doc.write("Debug Log" + ""); doc.close(); this.window_ = win; } var logLine = this.window_.document.createElement("div"); message = jsUtils.datetime.now() + ": " + message; logLine.appendChild(this.window_.document.createTextNode(message)); this.window_.document.body.appendChild(logLine); } }; jsUtils.ie = { copyTextToClipboard: function (text) { /// ///仅支持IE浏览器的复制操作 /// /// 复制到剪切板内容 var copyFrom = $('