Vista / W7小工具的javascript中的字符串操作

时间:2010-08-08 18:04:16

标签: 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];
  //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的调用(在函数format_lmd中)似乎停止了脚本(或更好:抛出异常)。虽然文档似乎表明split函数可用于在多个部分中拆分字符串,但在我的情况下它不起作用。

问题:

  • 我应该如何正确使用拆分方法?
  • 之前我没有使用Javascript,所以什么时候用“var”声明一个变量,什么时候对我来说仍然是个谜。是否有可用于小工具的Javascript的良好介绍?
  • 调试小工具的最佳方法是什么?

谢谢, 帕特里克

编辑:我发现了如何为Javascript启用调试器(请参阅http://msdn.microsoft.com/en-us/library/bb456467%28v=VS.85%29.aspx#_sidebar_overview_debugging_basic)。现在会弹出一个调试窗口并显示“Object expected”,但这对我没有帮助。

2 个答案:

答案 0 :(得分:1)

这是Windows桌面小工具API和 System.Shell 命名空间的主要问题之一。某些命令返回JScript本身未处理的类型。幸运的是,这不是其中之一,但问题类似。我会得到答案,但首先,有点边注边撒谎。

您注意到在功能中检查typeof lmd时,结果是“日期”。有点奇怪的是,没有本机日期类型JScript / ECMAScript - typeof new Date()将导致“对象”。原因是许多System.Shell。*方法被映射到.net等效方法,结果只返回到JScript,而没有将数据转换为JScript本机类型。 Microsoft的一个非常短视的实现。

lmd 输出到调试器时,您会看到字符串结果,如:

  

Wed Nov 25 11:06:30 UTC 2009

这是因为需要字符串的函数会将非字符串参数转换为字符串。 System.Debug.outputString()在这里也不例外。实现这一点,解决方案变得清晰 - 强制从“日期”到字符串的类型转换:

var lmdFields = String(lmd.split(' '));
// or
var lmdFields = (lmd+"").split(' ');

//-> ["Wed","Nov","25","11:06:30","UTC","2009"]

如果您想将日期转换为JavaScript Date 对象,您只需将其传递给 Date()构造函数:

var lmdFields = new Date(lmd);
System.Debug.outputString(lmdFields.toLocaleString());
//-> "25 November 2009 11:06:30"

答案 1 :(得分:0)

如果它是一个日期,那么这可能会有所帮助(未经测试,但需要指导)...

  function format_lmd(lmd)
  {
    month = lmd.getMonth()+1; // returns numeric value
    monthday = lmd.getDay(); // 0 for Sunday, 1 for Monday, 2 for Tuesday, and so on
    // not sure what you mean for 'moment'?
    return monthday+' '+month+' '+moment;
  }

您可以在数组中提供月份和日期值,如果需要,只需查看它们。

参考: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date#Methods