Vista/W7小工具';s javascript
我正在尝试编写Vista/W7小工具。在我的实验中,我想在系统上写下某些文件的修改日期。问题是,如果我想使用字符串操作函数,这个小工具就会停止写入其输出。该小工具的部分代码如下所示:Vista/W7小工具';s javascript,javascript,windows-desktop-gadgets,Javascript,Windows Desktop Gadgets,我正在尝试编写Vista/W7小工具。在我的实验中,我想在系统上写下某些文件的修改日期。问题是,如果我想使用字符串操作函数,这个小工具就会停止写入其输出。该小工具的部分代码如下所示: function format_lmd(lmd) { // Parse something like "Sun Aug 26 17:13:22 UTC+0200" var lmdFields = lmd.split(' '); //weekday = lmdFields[0]; //mon
function format_lmd(lmd)
{
// Parse something like "Sun Aug 26 17:13:22 UTC+0200"
var lmdFields = lmd.split(' ');
//weekday = lmdFields[0];
//month = lmdFields[1];
//monthday = lmdFields[2];
//moment = lmdFields[3];
//return monthday+' '+month+' '+moment;
return lmd;
}
function paintGadget()
{
var fileitem = System.Shell.itemFromPath("c:\\myfile.txt");
//canvas.addTextObject(' '+fileitem.modifyDate, 'Segoe UI', 9, 'white', text_offset, 21);
var result = null;
result = ' ';
result += format_lmd(fileitem.modifyDate);
canvas.addTextObject(result, 'Segoe UI', 9, 'white', text_offset, 21);
}
调用split(函数格式为_lmd)似乎会停止脚本(或者更好:抛出异常)。尽管文档似乎表明split函数可以用于将字符串拆分为多个部分,但在我的例子中它不起作用
问题:
- 如何正确使用拆分方法
- 我以前没有使用Javascript,所以何时用“var”声明变量,何时不用,对我来说仍然是个谜。对于可以用于小工具的Javascript,有没有一个很好的介绍
- 调试小工具的最佳方法是什么
编辑:我找到了如何为Javascript启用调试器(请参阅)。现在会弹出一个调试窗口,上面写着“预期对象”,但这对我没有帮助。如果是日期,那么这可能会有所帮助(未测试,但只是一个指南) 您可以在数组中提供月和日的值,如果需要,只需查找它们 参考:
如果是一个日期,那么这可能会有所帮助(不是测试,而是一个指南) 您可以在数组中提供月和日的值,如果需要,只需查找它们 参考:
这是Windows桌面小工具API和System.Shell命名空间的主要问题之一。有些命令返回的类型不是由JScript本机处理的。幸运的是,现在不是这样的时候,但问题是类似的。我会找到答案的,但首先,有点旁白 您注意到,在函数中检查lmd的类型时,“日期”是结果。奇怪的是,没有原生日期类型JScript/ECMAScript-
typeof new date()
将生成“object”。原因是许多System.Shell.*方法映射到.net等效方法,结果只返回到JScript,而不需要将数据转换为JScript本机类型。微软的一个非常短视的实现
将lmd输出到调试器时,您将看到一个字符串结果,类似于:
2009年11月25日星期三11:06:30 UTC
这是因为需要字符串的函数会将非字符串参数转换为字符串。System.Debug.outputString()在这里也不例外。意识到这一点,解决方案变得清晰-强制将类型从“日期”转换为字符串:
var lmdFields = String(lmd.split(' '));
// or
var lmdFields = (lmd+"").split(' ');
//-> ["Wed","Nov","25","11:06:30","UTC","2009"]
如果要将日期转换为JavaScript日期对象,只需将其传递给date()构造函数:
var lmdFields = new Date(lmd);
System.Debug.outputString(lmdFields.toLocaleString());
//-> "25 November 2009 11:06:30"
这是Windows桌面小工具API和System.Shell命名空间的主要问题之一。有些命令返回的类型不是由JScript本机处理的。幸运的是,现在不是这样的时候,但问题是类似的。我会找到答案的,但首先,有点旁白 您注意到,在函数中检查lmd的类型时,“日期”是结果。奇怪的是,没有原生日期类型JScript/ECMAScript-
typeof new date()
将生成“object”。原因是许多System.Shell.*方法映射到.net等效方法,结果只返回到JScript,而不需要将数据转换为JScript本机类型。微软的一个非常短视的实现
将lmd输出到调试器时,您将看到一个字符串结果,类似于:
2009年11月25日星期三11:06:30 UTC
这是因为需要字符串的函数会将非字符串参数转换为字符串。System.Debug.outputString()在这里也不例外。意识到这一点,解决方案变得清晰-强制将类型从“日期”转换为字符串:
var lmdFields = String(lmd.split(' '));
// or
var lmdFields = (lmd+"").split(' ');
//-> ["Wed","Nov","25","11:06:30","UTC","2009"]
如果要将日期转换为JavaScript日期对象,只需将其传递给date()构造函数:
var lmdFields = new Date(lmd);
System.Debug.outputString(lmdFields.toLocaleString());
//-> "25 November 2009 11:06:30"
我现在没有Vista/W7要测试,但是您是否尝试过
.split(//)
?调试器窗口总是报告“预期对象”。尝试使用你的建议,但这没有帮助。谢谢。什么是modifyDate
?你确定这是一根绳子吗?我猜lmd
的值被传递到函数中是null。根据它是一个字符串。但是说实话,我更喜欢约会。因为我感觉到了你的痛苦;-)我现在没有Vista/W7要测试,但是您是否尝试过.split(//)
?调试器窗口总是报告“预期对象”。尝试使用你的建议,但这没有帮助。谢谢。什么是modifyDate
?你确定这是一根绳子吗?我猜lmd
的值被传递到函数中是null。根据它是一个字符串。但是说实话,我更喜欢约会。因为我感觉到了你的痛苦;-)我希望这能起作用,但它仍然在“month=lmd.getMonth()+1;”行中给出错误“objectrequired”。微软的Javascript会与Mozzila的Javascript不兼容吗?我对此表示怀疑。这是标准的JS材料。由于无法深入研究lmd对象,我无法确定接下来的步骤。我希望这会起作用,但它仍然会在“month=lmd.getMonth()+1;”行上给出错误“Object required”。微软的Javascript会与Mozzila的Javascript不兼容吗?我对此表示怀疑。这是标准的JS材料。在无法深入研究lmd对象的情况下,我无法确定接下来的步骤。是的,就是这样。对不起,我只能给你+1并接受你的答案(我真的想给你+100)。谢谢你的回答。是的,就是这样。对不起,我只能给你+1并接受你的答案(我真的想给你+100)。谢谢你的回答。