代码回顾:YUI"/>
旧代码回顾:YUI
YUI-ext 代码两侧
旧时,写 yuiext 的代码的时候便学习过这些代码,两侧都是制作动画的代码。时间大概是两年前左右(07年初),但心路历程感觉是过了许久 呵呵,真的有天上十天,地下十年的感觉。那时候,靠自学,瞎浑的什么的都不懂,往这几句 script 撞呀撞呀,撞到做出效果为止!这不,一番经历,好歹也认识不少:JS 的道路并不坦,学 ajax 真的要下苦功!
言毕,丑汉终需见家翁,呵呵。下是那时稚嫩的代码。
XML数据岛 with 分页
纯客户端解决方案,呵呵在当年还是蛮实用的技巧,出来的效果也是“无刷新”的加载XML,包括可分页。就是这份小脚本,小弟愚钝,啃了不少的时间。删掉怪可惜,放这儿算是一份纪念帖吧
记得早期把玩 yui-ext 时候,曾经给一个函数折腾得几度想放弃 yui-ext。所说的那个函数就是就是 onReady
/* * 注册浏览器的DOMContentLoaded事件,@todo 有自我卸载的功能。 * @param { Function } onready [必填]在DOMContentLoaded事件触发时需要执行的函数 */ function onReady(onready){ var isReady = false; function doReady(){ if( isReady ) return; //确保onready只执行一次 isReady = true; onready(); } if(window.navigator.isIE8){/*IE*/ (function(){ if ( isReady ) return; try{ document.documentElement.doScroll("left"); }catch( error ) { setTimeout( arguments.callee, 0 ); return; } doReady(); })(); //window.attachEvent('onload',doReady); }else if (window.navigator.isWebkit && window.navigator.webkitVersion < 525){/*Webkit*/ (function(){ if(isReady) return; if (/loaded|complete/.test(document.readyState)){ doReady(); }else{ setTimeout( arguments.callee, 0 ); } })(); //window.addEventListener('load',doReady,false); }else{ /*FF Opera 高版webkit 其他*/ document.addEventListener("DOMContentLoaded", doReady, false); //document.removeEventListener( "DOMContentLoaded", arguments.callee, false ); } }
精简版:
function r(f){/in/.test(document.readyState)?setTimeout('r('+f+')',9):f()}
.html#0-tsina-1-29606-397232819ff9a47a7b7e80a40613cfe1
跨组件使用WSC组件对象
WSC 组件就是微软平台上脚本的模块化。在笔者的实践过程中,研究出一套灵活传递对象的方法,其实质就是送入 host.eval 函数的引用。见下面的 WSC 组件例子:
<?xml version="1.0" encoding="UTF-8"?>
<package><component id="deepcms"><?component error="true" debug="true"?><implements type="ASP" id="ASP" /><registration progid="deepcms" /><public><method name="getEdk" /><method name="getExtDirect" /><method name="getDeepBlog" /><method name="getDeepCMS" /><method name="domain"><PARAMETER name="ns" /></method></public><script type="text/javascript">with(new ActiveXObject('package_loader')){init({evalFn : eval,edk_folder : 'd:/projects/edk'});_import('core');_import('asp');var folder = Application.Contents('edk_root');var entity = Server.mappath('/app/deepcms/service/entity.js');_import(null, entity);var page = Server.mappath('/app/deepcms/service/page.js');_import(null, page);var deepcms_config = Server.mappath('/app/app/config/config.js');_import(null, deepcms_config);var deepcms_news = Server.mappath('/app/app/news/news.js');_import(null, deepcms_news);var deepcms_user = Server.mappath('/app/app/user/user.js');_import(null, deepcms_user);}function getEdk(){return $;}function getExtDirect(){return Ext.direct;}function getDeepBlog(){return DeepBlog;}function domain(ns){return $.Model.init.call(eval(ns));}function getDeepCMS(){return DeepCMS;}</script></component>
</package>
通过GetObject()调用:
// D:/dev/new/news/news.wsc
$$ = GetObject("script:" + Server.mappath('/libs/edk/edk-server/edk.wsc').replace(/\\/g, '/')).getEdk();
附送一个小脚本,有时很有用。
var wshObj = new ActiveXObject("WScript.Shell");
var code = wshObj.run('testServer fileServer.js', 0/* 不显示GUI,后台运行 */, false /*不等待程序,也就是执行之后就好*/);
alert('已启动node服务器!\n运行代码' + code);
close();
WScript.Shell 常用命令
WScript = {/*** 不显示UI,以后台执行的方式运行程序。* @param {String} cmd* @return {Number}*/quietRun : function (cmd){var wshObj = new ActiveXObject("WScript.Shell");return wshObj.run(cmd, 0/* 不显示GUI,后台运行 */, false /*不等待程序,也就是执行之后就好*/);}/*** 目录选择器。* @param {String} str* @return {Shell.Application}*/,showFolderPickuper : function (str){var objFolder = new ActiveXObject("Shell.Application").BrowseForFolder(0,str || "请选择一个目录。",0,0x11);return objFolder ? objFolder.Self.Path : '';}/*** 在脚本中创建浏览器窗体 适合WSC使用。*/,createBrowser : function (){with(new ActiveXObject("InternetExplorer.Application")){visible = false;addressBar = false;menuBar = false;statusBar = false;toolBar = false;resizable = true;left = 300;top = 200;width = 300;height = 240;silent = true;navigate("http://localhost");/*Document.title="VBScript 创建的窗口";Document.body.bgColor="#ECE9D8";Document.body.style.overflow="hidden";Document.body.style.borderWidth="0";Document.body.innerHtml="hi ";*/visible = true;}}/*** 显示系统变量,包括"Process"、"User"和"System"。* @return {Object}*/,showSystemVars : function (){var wshObj = new ActiveXObject("WScript.Shell");var args = ["Process", "User", "System"],result = {},item,e;for(var i = args.length-1; i >= 0; i--){result[args[i]] = {};for(e = new Enumerator(wshObj.Environment(args[i])); !e.atEnd(); e.moveNext()){var item = e.item().split("=");result[args[i]][item[0]] = item[1];}}return result;}/*** 添加系统环境变量。* @param {Sting} key* @param {String} value* @return {String}*/,addEnvVar : function (key, value){var wshObj = new ActiveXObject("WScript.Shell");var oSysEnv = wshObj.Environment("SYSTEM");if(!oSysEnv(key) && oSysEnv(key).indexOf(value) == -1){oSysEnv(key) = value;}else{alert(value + '已经在了');}return oSysEnv(key);}/*** 添加PATH环境变量* @param {String} v 目录字符串*/,addPath : function (v){var wshObj = new ActiveXObject("WScript.Shell");var oSysEnv = wshObj.Environment("SYSTEM");if( oSysEnv("Path").indexOf(v) == -1){oSysEnv("Path") += ';' + v;}else{alert('警告:该条目' + v +'已存在!');}return oSysEnv("Path");}/*** 获取系统文件夹。通过字体目录获取的。* @credit .html*/,getSpecialFolder: function(type){var fontPath = shell.SpecialFolders("Fonts");var winPath = fontPath.slice(0, fontPath.lastIndexOf("\\"));switch(type){case "windows":return winPath;break;case "system32":return winPath + "\\system32";break;default:return shell.SpecialFolders(type);break;}}
};
更多推荐
旧代码回顾:YUI
发布评论