- 浏览: 254154 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wangyajin333:
太棒了。谢谢分享。
ajax提交编码转换问题 java.io.charConVersionException:EOF -
leon.s.kennedy:
security3.0 也是如此
spring Security 中角色名字必须满足ROLE_XXX的格式 -
CoderDream:
如果把工程源代码贴出了就更好了,可以不带jar档!
struts2中Spring Security 自定义登陆页面的实现 -
heyujunlikely:
String s = "/**** package ...
java 去除注释的正则表达式 -
hastenlife:
[i][/i][b][/b][u][/u]引用引用[url][ ...
struts2 Validator 整合freemarker 取得FieldError的方法
发布一个最新版coos核心代码
完整版本请到google code开源项目上下载
google.code网址:http://code.google.com/p/coos/
coos.js
/** * @author zdz8207 * 通用面向对象脚本库 * @version 1.0 * */ var coos = function(){this.version = "1.0";}; /** * 创建对象和方法的通用函数,兼容多种浏览器,实现高效、方便的继承体系,解决多种常规创建的性能问题 * @param parantObj jsonObj * @example * var Person = coos.Class //默认派生自object基本类 ({ Create: function(name, age) { this.base(); //调用上层构造函数 this.name = name; this.age = age; }, SayHello: function() { alert("Hello, I'm " + this.name + ", " + this.age + " years old."); }, toString: function() //覆写toString方法 { return this.name; } }); var Employee = coos.Class(Person, //派生自Person类 { Create: function(name, age, salary) { this.base(name, age); //调用基类的构造函数 this.salary = salary; }, ShowMeTheMoney: function() { alert(this + " $" + this.salary); //这里直接引用this将隐式调用toString() } }); var BillGates = new Person("Bill Gates", 53); var SteveJobs = new Employee("Steve Jobs", 53, 1234); alert(BillGates); //这里将隐式调用覆写后的toString()方法 BillGates.SayHello(); SteveJobs.SayHello(); SteveJobs.ShowMeTheMoney(); var LittleBill = new BillGates.Type("Little Bill", 6); //用BillGate的类型建LittleBill LittleBill.SayHello(); alert(BillGates.isA(Person)); //true alert(BillGates.isA(Employee)); //false alert(SteveJobs.isA(Person)); //true * */ coos.Class = function() { var aDefine = arguments[arguments.length-1]; //最后一个参数是类定义 if(!aDefine) return; var aBase = arguments.length>1 ? arguments[0] : coos.object; //解析基类 function prototype_(){}; //构造prototype的临时函数,用于挂接原型链 prototype_.prototype = aBase.prototype; //准备传递prototype var aPrototype = new prototype_(); //建立类要用的prototype for(var member in aDefine) //复制类定义到当前类的prototype { if(member!="Create") //构造函数不用复制 { aPrototype[member] = aDefine[member]; } } //根据是否继承特殊属性和性能情况,可分别注释掉下列的语句 if(aDefine.toString != Object.prototype.toString) { aPrototype.toString = aDefine.toString; } if(aDefine.toLocaleString != Object.prototype.toLocaleString) { aPrototype.toLocaleString = aDefine.toLocaleString; } if(aDefine.valueOf != Object.prototype.valueOf) { aPrototype.valueOf = aDefine.valueOf; } if(aDefine.Create) //若有构造函数 { var aType = aDefine.Create; //类型即为该构造函数 } else //否则为默认构造函数 { aType = function() { this.base.apply(this, arguments); //调用基类构造函数 }; } aType.prototype = aPrototype; //设置类(构造函数)的prototype aType.Base = aBase; //设置类型关系,便于追溯继承关系 aType.prototype.Type = aType; //为本类对象扩展一个Type属性 return aType; //返回构造函数作为类 }; //根类object定义: coos.object = function(){}; //定义小写的object根类,用于实现最基础的方法等 coos.object.prototype.isA = function(aType) //判断对象是否属于某类型 { var self = this.Type; while(self) { if(self == aType) return true; self = self.Base; } return false; }; coos.object.prototype.base = function() //调用基类构造函数 { var Base = this.Type.Base; //获取当前对象的基类 if(!Base.Base) //若基类已没有基类 { Base.apply(this, arguments); //则直接调用基类构造函数 } else //若基类还有基类 { this.base = MakeBase(Base); //先覆写this.base Base.apply(this, arguments); //再调用基类构造函数 delete this.base; //删除覆写的base属性 } function MakeBase(Type) //包装基类构造函数 { var Base = Type.Base; if(!Base.Base) return Base; //基类已无基类,就无需包装 return function() //包装为引用临时变量Base的闭包函数 { this.base = MakeBase(Base); //先覆写this.base Base.apply(this, arguments); //再调用基类构造函数 } } }; /** * 扩展函数功能 * @param destination 要扩展的函数 * @param source 扩展函数 * @example coos.extend(Array.prototype,{ clear : function () { this.length = 0; return this; }, first : function () { return this[0]; }, last : function () { return this[this.length - 1]; } }); */ coos.extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } return destination; }; /** * simple inherit whit call parent this attribute * @param parentFunction */ coos.call = function(parentFunction) { var parentfn = parentFunction + ".call(this)"; eval(parentfn); }; /** * override method * @param origclass, overrides the overrides is a json or hashmap */ coos.override = function(origclass, overrides) { if(overrides) { var p = origclass.prototype; for(var method in overrides) { p[method] = overrides[method]; } } }; /** * 克隆对象 */ coos.clone = function(obj) { var temp = null; for(var p in obj) { temp[p] = obj[p]; } return temp; }; /** * 通用接口函数,为实现设计模式提供支持 * @param name String类型 接口名称 * @param methods 字符串数组,每个字符串都是一个必须的方法名称 * @example //test coos.Interface var testInterface = new coos.Interface("testInterface",["getId","getName"]); function adminUser(user) { //传入的user对象必须实现testInterface的方法 coos.Interface.impl(user,testInterface); //由上面的接口保证了user对象实现了接口方法可以安全使用 var id = user.getId(); var name = user.getName(); var message = "I'm a admin user"; alert("id = " + id + " name = " + name + " message = " + message); } function vipUser(user) { //传入的user对象必须实现testInterface的方法 coos.Interface.impl(user,testInterface); //由上面的接口保证了user对象实现了接口方法可以安全使用 var id = user.getId(); var name = user.getName(); var message = "I'm a vip user"; alert("id = " + id + " name = " + name + " message = " + message); } function user(id,name) { this.getId = function(){return id}; this.getName = function(){return name}; } adminUser(new user("1","admin")); vipUser(new user("2","zdz")); * */ coos.Interface = function(name, methods) { if(arguments.length != 2) { throw new Error("Interface constructor called with " + arguments.length + "arguments, but expected exactly 2."); } this.name = name; this.methods = []; for(var i = 0, len = methods.length; i < len; i++) { if(typeof methods[i] !== 'string') { throw new Error("Interface constructor expects method names to be " + "passed in as a string."); } this.methods.push(methods[i]); } }; /** * 最少传入两个参数,一个为对象,另外为要实现的接口,可传入多个接口 * 在使用接口方法前作判断coos.Interface.impl(user,testInterface); */ coos.Interface.impl = function(object) { if(arguments.length < 2) { throw new Error("Function Interface.impl called with " + arguments.length + "arguments, but expected at least 2."); } for(var i = 1, len = arguments.length; i < len; i++) { var _interface = arguments[i]; if(_interface.constructor !== coos.Interface) { throw new Error("Function Interface.impl expects arguments " + "two and above to be instances of Interface."); } for(var j = 0, methodsLen = _interface.methods.length; j < methodsLen; j++) { var method = _interface.methods[j]; if(!object[method] || typeof object[method] !== 'function') { throw new Error("Function Interface.impl: object " + "does not implement the " + _interface.name + " interface. Method " + method + " was not found."); } } } }; /** * 反射机制的简单实现 * @param obj 传入对象为obj类型,可以是json形式的 * */ coos.reflection = function(obj) { for(var p in obj) { if(typeof(obj[p]) == "function") { //如果属性为function类型则执行 obj[p](); } } }; /** * 利用闭包构造一个单例类型返回,不能创建新的实例 * @param fn 闭包函数function(){}的形式 * @param singletonName 创建的单例类型名称 * @example var sessionFactory = new coos.singleton( function(){ this.message = "I'm a sessionFactory!"; this.sayHello = function(){alert("Hello!");} },"sessionFactory" ); var mySession = sessionFactory.getInstance(); mySession.sayHello(); var newSession = new sessionFactory();// throw 单例类型sessionFactory不能实例化! */ coos.singleton = function(fn,singletonName) { singletonName = singletonName || "singletonClass"; var obj = new fn(); var singletonClass = function() { throw new Error("单例类型" + singletonName + "不能实例化!"); }; singletonClass.getInstance = function(){return obj;}; singletonClass.name = singletonName; return singletonClass; }; /** * 定义通用的简单命令模式接口 */ coos.command = new coos.Interface("coos.command",["execute"]); /** * 定义通用的带取消操作的命令模式接口 */ coos.undocommand = new coos.Interface("coos.undocommand",["execute","undo"]); /** * aop 的实现 * @param object 必须为对象,不能是方法本身 * @example function aopTest() { this.say1 = function(s) { alert(s); }; this.say2 = function(s) { alert(s); }; } function beforeHander() { alert("aspect said:"); } function afterHander() { alert("said by aspect"); } var test = new aopTest(); coos.aop(test); test.before("say1",beforeHander); test.after("say1",afterHander); test.say1("hello I'm say1"); test.before("say2",beforeHander); test.after("say2",afterHander); test.say2("hello I'm say2"); */ coos.aop = function(object) { if(typeof(object) != "object") { throw new Error("传入的对象类型必须为object!"); return false; } object.yield = null; object.rv = {}; object.before = function(method, f) { var original = eval("this." + method); this[method] = function() { f.apply(this, arguments); return original.apply(this, arguments); }; }; object.after = function(method, f) { var original = eval("this." + method); this[method] = function() { this.rv[method] = original.apply(this, arguments); return f.apply(this, arguments); }; }; object.around = function(method, f) { var original = eval("this." + method); this[method] = function() { this.yield = original; return f.apply(this, arguments); }; }; }; /** * 采用prototype的Object扩展方法 * @param obj 需要判断的对象 */ coos.extend(Object, { extend : function(destination, source) { for (var property in source) destination[property] = source[property]; return destination; }, toJSON: function(object) { var type = typeof object; switch (type) { case 'undefined': case 'function': case 'unknown': return; case 'boolean': return object.toString(); } if (object === null) return 'null'; if (object.toJSON) return object.toJSON(); if (Object.isElement(object)) return; var results = []; for (var property in object) { var value = Object.toJSON(object[property]); if (!Object.isUndefined(value)) results.push(property.toJSON() + ': ' + value); } return '{' + results.join(', ') + '}'; }, keys: function(object) { var keys = []; for (var property in object) keys.push(property); return keys; }, values: function(object) { var values = []; for (var property in object) values.push(object[property]); return values; }, clone: function(object) { return Object.extend({ }, object); }, isElement: function(object) { return object && object.nodeType == 1; }, isArray: function(object) { //判断是否为数组,考虑到多种情况 return Object.prototype.toString.call(object) === '[object Array]'; //return object != null && typeof object == "object" && 'splice' in object && 'join' in object; }, isHash: function(object) { return object instanceof Hash; }, isFunction: function(object) { return typeof object == "function"; }, isString: function(object) { return typeof object == "string"; }, isNumber: function(object) { return typeof object == "number"; }, isUndefined: function(object) { return typeof object == "undefined"; } }); /** * json的处理函数 * parse函数把json字符串转换成对象 * toJSONString把对象转换成json字符串(包括普通对象和json对象) */ coos.json = { parse : function(data) { if(typeof(data) != "object") { data = eval('(' + data + ')'); } return data; }, toJSONString : function(obj) { switch(typeof(obj)) { case "object" : { var result = []; if(obj instanceof Array) { var len = obj.length; for(var i = 0; i < len; i++) { result.push(coos.json.toJSONString(obj[i])); } return "[" + result.toString(",") + "]"; } else if(obj instanceof RegExp) { return obj.toString(); } else { for(var attribute in obj) { result.push(attribute + ":" + coos.json.toJSONString(obj[attribute])); } return "{" + result.join(",") + "}"; } } case "function": { return "function(){}"; } case "number": { return obj.toString(); } case "boolean": { return obj.toString(); } case "string": { return "\"" + obj.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g,function(a){return ("\n" == a) ? "\\n":("\r" == a) ? "\\r":("\t" == a) ? "\\t":"";}) + "\""; } default: { return obj.toString(); } } } }; /** * browser userAgent */ coos.userAgent = navigator.userAgent.toLowerCase(); /** * Figure out what browser is being used * typeof(window.external.max_version) in some ie7.0 is unkonwn not undefined * @example if(coos.browser.msie){alert("ie browser "+"version="+ coos.browser.version);} if(coos.browser.maxthon){alert("maxthon browser "+"version="+ coos.browser.maxthonVersion);}; alert(coos.browser.maxthon + " maxthon browser "+"version= "+ coos.browser.maxthonVersion); */ coos.browser = { version: (coos.userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], safari: /webkit/.test(coos.userAgent) && !/chrome/.test(coos.userAgent), chrome: /chrome/.test(coos.userAgent), opera: /opera/.test(coos.userAgent), msie: /msie/.test(coos.userAgent) && !/opera/.test(coos.userAgent), firefox: /firefox/.test(coos.userAgent), mozilla: /mozilla/.test(coos.userAgent) && !/(compatible|webkit)/.test(coos.userAgent), maxthon: (window.external && (typeof(window.external.max_version) == "string"))?true:false, maxthonVersion: (window.external && (typeof(window.external.max_version) == "string"))?window.external.max_version.substr(0,1):undefined }; /** * 简单的兼容浏览器的onload事件绑定 * @param fn 需要绑定window.onload后执行的function */ coos.onloadEvent = function(fn) { if (window.addEventListener) { window.addEventListener("load",fn,false); } else if(window.attachEvent) { window.attachEvent("onload", fn); } else { window.onload = fn; } }; /** * 根据id快速获取dom对象的方法 * @param id 字符串类型 * @return DOM element */ coos.$id = function(id) { return document.getElementById(id); }; /** * 根据name快速获取dom对象的方法 * @param name 字符串类型 * @return DOM elements */ coos.$name = function(name) { return document.getElementsByName(name); }; /** * 在不确定传入id还是obj类型时快速获取dom对象的方法 * @param el 元素id或对象 * @return DOM element */ coos.$obj = function(el) { var obj = el; if(typeof(el) == "string") { obj = document.getElementById(el); } return obj; }; /** * 获取元素下面所有传入类型的对象. * @param tag 标签名称 * @param el 元素id或对象,为空或不存在则默认为document * @example 获取id为testTag的div下所有li对象为:coos.$tag("li","testTag"); 获取所有li对象为:coos.$tag("li"); */ coos.$tag = function(tag,el) { var el = coos.$obj(el) || document; return el.getElementsByTagName(tag); }; /** * 获取元素的类型名称(如div span) */ coos.$tagName = function(el) { return coos.$obj(el).tagName.toLowerCase(); }; /** * 获取iframe的contentWindow对象 */ coos.$F = function(el) { if(!coos.$obj(el) || coos.$tagName(el) != "iframe") { return null; } return coos.$obj(el).contentWindow; }; /** * 取得某个范围内的随机数 */ coos.$random = function(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); }; /** * 获得当前时间 */ coos.$time = function() { return new Date().getTime(); }; /** * 返回document.body */ coos.$body = function() { return document.body; }; /** * 获取元素的innerhtml内容 * @param el 元素id或对象,默认为document.body */ coos.$html = function(el) { var obj = coos.$obj(el)|| document.body; return obj.innerHTMl; }; /** * 获取head */ coos.$head = function() { return document.getElementsByTagName('head')[0]; }; /** * 获取元素的文本内容 * @param el 元素id或对象 */ coos.$text = function(el) { var obj = coos.$obj(el); return obj.textContent || obj.innerText; }; /** * 创建元素 * coos.$create("div")返回一个未绑定到DOM上的div对象 */ coos.$create = function(tag) { return document.createElement(tag); }; /** * 添加元素 * @param el 要添加子元素的父元素 * @param 要添加的子元素 */ coos.$append = function(el,child) { coos.$obj(el).appendChild(coos.$obj(child)); }; /** * 删除元素对应的class */ coos.$removeClass = function(className,el) { coos.$obj(el).className = coos.$obj(el).className.replace(new RegExp("( ?|^)" + className + "\\b"), ""); }; /** * 判断元素是否有该class */ coos.$hasClass = function(className,el) { var oReg = new RegExp("( ?|^)" + className + "\\b"); return oReg.test(coos.$obj(el).className); }; /** * 判断元素是否有该class */ coos.$addClass = function(className,el) { var el = coos.$obj(el); if(coos.$hasClass(className,el)) { return; } else { el.className = el.className + " " + className; } }; /** * 删除元素下对应标签元素所有对应的样式 */ coos.$removeTagClass = function(className,tag,el) { var els = coos.$tag(tag,el); var len = els.length; for(var i = 0; i < len; i++) { coos.$removeClass(className,els[i]); } }; /** * 获取元素下对应标签下对应样式的所有元素 */ coos.$getTagClassElements = function(className,tag,el) { var els = coos.$tag(tag,el); var result = []; var len = els.length; for(var i = 0; i < len; i++) { if(coos.$hasClass(className,els[i])) { result[result.length] = els[i]; } } return result; }; /** * 此元素下所有对应标签的元素 */ coos.$hiddenTag = function(tag,el) { var els = coos.$tag(tag,el); var len = els.length; for(var i = 0; i < len; i++) { els[i].style.display = "none"; } }; coos.$top = function(el) { var obj = coos.$obj(el); if(coos.browser.msie) { var top = 0; } else { var top = 2; } while(obj.offsetParent) { top += obj.offsetTop + (obj.currentStyle?(parseInt(obj.currentStyle.borderTopWidth)).NaN0():0); obj = obj.offsetParent; } top += obj.offsetTop + (obj.currentStyle?(parseInt(obj.currentStyle.borderTopWidth)).NaN0():0); return top; }; coos.$left = function(el) { var obj = coos.$obj(el); if(coos.browser.msie) { var left = -2; } else { var left = 0; } while(obj.offsetParent) { left += obj.offsetLeft + (obj.currentStyle?(parseInt(obj.currentStyle.borderLeftWidth)).NaN0():0); obj = obj.offsetParent; } left += obj.offsetLeft + (obj.currentStyle?(parseInt(obj.currentStyle.borderLeftWidth)).NaN0():0); return left; }; /** * 插入html代码,解决火狐下不能直接插入html字符串的问题 */ coos.$insert = function(where, el, html) { where = where.toLowerCase(); if(el.insertAdjacentHTML) { switch(where) { case "before": el.insertAdjacentHTML('beforeBegin', html); return el.previousSibling; break; case "top": el.insertAdjacentHTML('afterBegin', html); return el.firstChild; break; case "bottom": el.insertAdjacentHTML('beforeEnd', html); return el.lastChild; break; case "after": el.insertAdjacentHTML('afterEnd', html); return el.nextSibling; break; } throw 'Illegal insertion point -> "' + where + '"'; } var range = el.ownerDocument.createRange(); var frag; switch(where) { case "before": range.setStartBefore(el); frag = range.createContextualFragment(html); el.parentNode.insertBefore(frag, el); return el.previousSibling; break; case "top": if(el.firstChild) { range.setStartBefore(el.firstChild); frag = range.createContextualFragment(html); el.insertBefore(frag, el.firstChild); return el.firstChild; }else { el.innerHTML = html; return el.firstChild; } break; case "bottom": if(el.lastChild) { range.setStartAfter(el.lastChild); frag = range.createContextualFragment(html); el.appendChild(frag); return el.lastChild; } else { el.innerHTML = html; return el.lastChild; } break; case "after": range.setStartAfter(el); frag = range.createContextualFragment(html); el.parentNode.insertBefore(frag, el.nextSibling); return el.nextSibling; break; } throw 'Illegal insertion point -> "' + where + '"'; }; //一加载脚本就需要初始化的函数,避免对象不存在的错误。 (function(){ /** * 添加样式 */ coos.style = { add : function(content) { var style = null; if(document.all) { style = document.createStyleSheet(); style.cssText = content; } else { style = document.createElement("style"); style.type = "text/css"; //style.innerHTML = content;//Safari、Chrome 下innerHTML只读 style.textContent = content; try { document.getElementsByTagName("head")[0].appendChild(style); } catch(e){} } } }; /** * 提供url常用操作功能 * random 在url后面加入随机数参数 * getAttribe 获得url中的参数值 * replaceAttribe 替换url中的参数值 * addAttribe 添加参数 * getAction 获得url中action的名字(后缀可变) * location url跳转 */ coos.url = { random : function(url) { if (url.indexOf ("?") > 0) { url = url + "&random=" + new Date().getTime(); } else { url = url + "?random=" + new Date().getTime(); } return url; }, getAttribe : function(type,url) { var url = url || location.href; var urltemp = url.split(type + "=")[1]; if(!urltemp) return ""; if(urltemp.indexOf("&") == -1) { return urltemp; } else { return urltemp.split("&")[0]; } }, replaceAttribe : function(type,value,url) { var url = url || location.href; var oReg = new RegExp(type + "=([^&]+)?","g"); url= url.replace(oReg, type + "=" + value); return url; }, addAttribe : function(type,value,url) { var url = url || location.href; if(url.indexOf ("?") == -1) { return (url + "?" + type + "=" + value); } else { return (url + "&" + type + "=" + value); } }, getAction : function(url,action) { var url = url || location.href; var action = action || ".action"; var temp = url.split(action)[0]; return temp.substring(temp.lastIndexOf("/")+1,temp.length); }, location : function(url,message) { var url = url || location.href; if(!message) { window.location = url; return false; } if(confirm(message)) { window.location = url; } return false; } }; /** * iframe的处理函数 * 提供批量和单独iframe自适应高度功能 */ coos.iframe = { autoHeights : function(els) { for (var i = 0; i < arguments.length; i++) { coos.iframe.autoHeight(arguments[i]); } }, autoHeight : function(el) { var obj = coos.$obj(el); var id = obj.id; var subWeb = document.frames ? document.frames[id].document : obj.contentDocument; if(obj != null && subWeb != null) { //iframe body 设置为height:100%;时火狐下最小高度为150 obj.height = parseInt(subWeb.body.scrollHeight) + "px"; } }, onload : function(el,fn) { var ifr = coos.$obj(el); //IE中iframe只支持隐形的onload事件,需要通过attachEvent来注册,ie的readystatechange事件有一些潜在的问题 if(ifr.attachEvent) { ifr.attachEvent("onload",fn); } else { ifr.onload = fn; } } }; /** * cookie的处理函数 */ coos.cookie = { set : function(name,value,days,path,domain,secure) { var days = days || 100; var path = path || "/"; var domain = domain || ""; var secure = secure || ""; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString() + ";path="+ path + (domain == "" ? "" : ("; domain=" + domain)) + (secure ? "; secure" : ""); }, get : function(name) { var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)")); if(arr != null) return unescape(arr[2]); return null; }, del : function(name) { var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval=this.get(name); if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString(); } }; /** * form相关的通用函数 */ coos.form = { submit : function(formElement,submitId) { if(!coos.$obj(formElement))return false; var submitId = submitId || "subButton"; coos.$id(submitId).disabled = true; coos.$obj(formElement).submit(); return false; }, update : function(formElement,formName,action) { if(formName) formElement.name = formName; if(action) formElement.action = action; }, validate : function(){} }; })(); //初始化函数结束 /** * 引入script和css文件 */ coos.include = function() { function create(path) { var src = path.split("|")[0]; var charset = path.split("|")[1]; var sobj = document.createElement('script'); sobj.type = "text/javascript"; sobj.src = src; sobj.charset = charset || "utf-8"; document.getElementsByTagName('head')[0].appendChild(sobj); } function getScriptPath(key) { var scripts = document.getElementsByTagName("script"); var len = scripts.length; for (var i = 0; i < len; i++) { if(scripts[i].src.indexOf(key) != -1) { return scripts[i].src.split(key)[0]; } } return null; } //获得script的路径,只传入文件名则默认为coos.js同一个目录 function path(src,key) { if(src.indexOf("/") != -1) { return src; } else { var key = key || "coos.js"; return getScriptPath(key) + src; } } return{ script : function() { var len = arguments.length; for(var i = 0; i < len; i++) { create(path(arguments[i])); } }, css : function() { var len = arguments.length; for(var i = 0; i < len; i++) { var css = document.createElement("link"); css.rel = "stylesheet"; css.type = "text/css"; css.href = path; create(css); } } } }(); //由于导入文件太多可能导致难以预料的问题,把主要函数开发稳定后合并在同类脚本里面可以减少不必要的异常 //需要设定charset属性的在文件后面加上|编码,如:coos.ext.base.js|gbk,coos.ext.base.js|utf-8,默认为utf-8 coos.include.script("coos.ext.base.js"); coos.include.script("coos.ui.base.js"); //由于ajax文件内容比较多,还不稳定故单独导入 coos.include.script("coos.ext.ajax.js");
完整版本请到google code开源项目上下载
google.code网址:http://code.google.com/p/coos/
发表评论
-
coos.$script 动态插入脚本并执行的方法
2010-08-23 16:59 1860/** * 动态插入脚本并执行 * ... -
终于完成coos的重构了
2010-02-07 18:01 1009考虑到大部分人不一定使用java或ssh开发,已经去掉ssh框 ... -
ajax中post的escape扩展方法
2009-07-29 18:47 1490ajax中post的escape对有些特殊字符无法转换,例如: ... -
一个实用的js window封装类
2009-07-29 18:46 1439发布一个实用的js window封装类,主要内容包括: 1. ... -
ajax中post的escape扩展方法
2009-07-24 14:09 1441ajax中post的escape对有些特殊字符无法转换,例如: ... -
发布一个实用的js window封装类
2009-07-23 19:02 1793发布一个实用的js window封装类,主要内容包括: 1. ... -
coos脚本库说明
2009-07-02 11:43 1365coos脚本库说明 coos(commo ...
相关推荐
压缩包中的"CoOS-1.1.3.exe"文件可能是CoOS-1.1.3操作系统的安装程序,用户可以通过运行这个文件来获取CoOS-1.1.3的开发环境,包括编译工具、库文件以及示例代码等,从而方便开发者进行项目开发和调试。 总的来说,...
2. **下载与解压CoOS**:从CooCox官方网站或其他可信源获取CoOS的源代码,并将其解压到一个合适的位置。解压后的文件可能包含readme.txt,它提供了关于如何使用和配置CoOS的指南。 3. **集成CoOS源码**:将解压后的...
STM32_IAR_CoOS工程模板是一个专为STM32F103微控制器设计的集成开发环境(IDE)项目模板,它充分利用了IAR Embedded Workbench的编译工具链,并结合了CooCox CoOS实时操作系统。这个模板为开发者提供了一个快速启动...
5. **时间片轮转(Time-Slicing)**:在COOS中,如果所有运行的任务优先级相同,可能会使用时间片轮转策略,即每个任务在一定时间内执行,然后被强制切换到下一个任务。 6. **事件标志组(Event Flags)**:事件...
CooCox CoOs中文用户手册
在这个示例中,我们将使用 Keil RealView MDK 开发工具和 NXP 的 EM-LPC1700 开发板实现一个简单的基于 CoOS 的 demo。 **示例描述**: - **设备**:使用 Keil RealView MDK 开发工具和 NXP 的 EM-LPC1700 开发板...
- **任务调度**:当一个任务完成或被阻塞时,系统会选择另一个就绪状态的任务来执行。 - **临界区**:为了防止多个任务同时访问共享资源而引起的数据不一致问题,CooCoxCoOS提供了临界区的概念。 - **中断**:中断...
Coos操作系统源代码■免费并开源 ■ARM Cortex M3及M0定制操作系统 ■高度可裁剪性,最小系统内核仅974Byte ■支持优先级抢占和时间片轮转 ■自适应任务调度算法 ■中断延时时间趋近于零 ■堆栈溢出检测 ■信号量、...
一款免费并开源的嵌入式实时多任务操作系统,最小系统内核小于1KB。 具有高度可裁剪性,支持优先级抢占和时间片轮转两种任务调度机制,自适应任务调度算法,中断延时时间几乎为0,可检测堆栈溢出,支持信号量、邮箱...
在压缩包中的“Nucleo_F103_CoOS”很可能是一个包含了工程文件、源代码、配置文件等的目录。这些文件将帮助开发者理解如何在STM32F103ZET6上搭建并运行带有COOS操作系统的应用程序。通常,这样的工程文件会包含以下...
【标题】"LPC1766_LwIP_CoOS.zip" 是一个包含NXP LPC1766微控制器使用的LwIP轻型网络协议栈与CoOS实时操作系统的示例工程。这个压缩包提供了在LPC1766芯片上实现TCP/IP网络功能和实时操作系统协同工作的完整资源。 ...
本文将深入探讨一款专为ARM Cortex M系列微处理器设计的小型操作系统——CoOS,并分析其在嵌入式系统中的应用与优势。 首先,我们要理解ARM Cortex M系列。ARM Cortex M是ARM公司针对微控制器市场推出的一系列...
完整 cmsis,可以直接在keil里或者coos里调用,
它提供了一个任务调度器,允许并发执行多个任务,并且支持抢占式调度,确保高优先级任务能够及时响应。此外,CoOS还包括了信号量、邮箱、消息队列等同步和通信机制,以及内存管理功能,为开发复杂嵌入式应用提供了...
这个压缩文件包含了一个名为"Coos-LED"的项目,可能是一个基于STM32的LED控制程序。以下是关于这个主题的详细知识点: 1. **STM32系列**:STM32是由意法半导体(STMicroelectronics)推出的基于ARM Cortex-M内核的...
STM32 COOS 是一个基于STM32微控制器的轻量级操作系统,主要适用于资源有限的嵌入式系统。这个压缩包可能包含了实现COOS操作系统的所有必要文件,包括源码、配置文件、示例程序等,方便开发者进行学习和移植到自己的...
《电子-Coos流水灯.zip》是一个关于嵌入式系统开发的资源包,主要涉及的是STM32系列微控制器,特别是STM32-F0、F1和F2型号。这个项目的核心是实现一种常见的LED显示效果——流水灯。下面将详细阐述相关知识点。 一...
总的来说,coos是一个专为微控制器设计的轻量级操作系统,它利用协作式多任务模型实现了高效的任务调度,以纯C语言编写保证了良好的可移植性。通过深入理解和应用coos,开发者可以在各种嵌入式系统中构建出高效、...
对于想要在Arduino项目中实现多任务并希望保持代码简洁的开发者来说,"a_coos"是一个非常有价值的工具。通过学习和使用"a_coos",开发者可以更好地理解和实践嵌入式系统的并发编程,提升项目复杂性和效率。