行云无鸣

2011-09-06

JavaScript下Date的setMonth默认参数导致的bug

Filed under: 乱语 — 标签:, , — hellyguo @ 14:35

Bug表现:
var now = new Date();
now.setYear(2011);
now.setMonth(8);
now.setDate(1);

出来的不是想象的2011.9.1,而是2011.10.1。
确认是bug,1.31->2.1,8.31->9.1,10.31->11.1 三个日期会导致bug触发
解释如下:
——–

setMonth 方法
设置 Date 对象中用 本地时间表示的月份值。

dateObj.setMonth(numMonth[, dateVal])

参数
dateObj

必选项。任意 Date 对象。

numMonth

必选项。一个等于月份值的数值。

dateVal

可选项。一个代表日期的数值。如果没有提供此参数,那么将使用通过调用 getDate 方法而得到的数值。

——–
8.31调用取下一个月的日期时,由于js代码中是采取year,month,date逐项输入的方式
第一个setYear输入year时,正确,无误;
第二个setMonth,在只输入month时,存在隐含变量date,值为当前值31。这时,输入8代表9月时,又带上了31代表31号。日历上没有9.31,就自动跳到了10.1。导致bug的发生。
修改方法:
1.直接调用有参构造函数var now = new Date(2011,8,1)
或者
2.采用setMonth(month,1)

2011-08-15

打造一个快捷打开应用程序的页面

Filed under: 乱语 — 标签:, , , , — hellyguo @ 22:05

一直希望在Windows下快捷地运行程序,可惜始终找不到合适的快速启动软件来管理我如许多的应用。用过AltRun,可惜总不顺眼。还是坚持使用HoeKey。但软件多了,HoeKey管理热键就越来越多,和其他软件的冲突也越来越多,得不偿失了。为此,HoeKey就只精简地使用打开浏览器(firefox/chrome/ie)/邮件客户端(thunderbird)/TM/CMD几项。其他的程序,就是采用Run(win+r)来打开的。

今天突发奇想,能否在浏览器上做文章,通过编写一张固定的页面来实现程序的调用。尚幸,在IE/Firefox下轻松实现了。

  1. 我的程序,常用的都放在D:\GreenSoft下,通过TM的Alt+F7,查找出所有其下的Exe文件,打开为列表
  2. TM下,Ctrl+a全选,Ctrl+3拷贝全路径
  3. 将记录插入VIM中
  4. 通过正则表达式替换将路径替换为html项
    使路径中的斜杠变为双斜杠,在JS中能正常使用
    %s/\\[A-Za-z]/\\\\\1/g
    将路径扩展为html
    %s/\(.*\)/<li><a href="#" onclick="exec('\1')">\1<\/a><\/li>/g
  5. 添加javascript
    for ie

    function exec(strPath){
    try {
    var objShell = new ActiveXObject("wscript.shell");
    objShell.Run(strPath);
    objShell = null;
    }
    catch (e) {
    alert('找不到文件"' + strPath + '"(或它的组件之一)。请确定路径和文件名是否正确.')
    }
    }

    for firefox

    function exec(strPath){
    try {
    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(strPath);
    file.launch();
    }
    catch (e) {
    alert(e)
    }
    }
  6. 保存此页面

效果:
在浏览器打开此页面,通过Ctrl+F定位后,点击执行即可
最后,附上最简单的调用cmd的页面代码

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>GreenSoft可执行文件列表</title>
</head>
<script type="text/javascript">
function exec_ieonly(strPath){
try {
var objShell = new ActiveXObject("wscript.shell");
objShell.Run(strPath);
objShell = null;
}
catch (e) {
alert('找不到文件"' + strPath + '"(或它的组件之一)。请确定路径和文件名是否正确.')
}
}
function exec(strPath){
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(strPath);
file.launch();
}
catch (e) {
alert(e)
}
}
</script>
<body>
<div>
<ul>
<li>
<a href="#" onclick="exec('C:\\Windows\system32\cmd.exe')">cmd</a>
</li>
...
</ul>
</div>
</body>
</html>

%d 博主赞过: