使用window.external将javascript Date对象传递给C#WebBrowser控件

时间:2011-04-14 10:52:50

标签: c# javascript .net webbrowser-control com-interop

我可以使用WebBrowser.ObjectForScripting WinForms控件中的window.external来调用WebBrowser的C#方法,并传递stringintbool然而,我不知道如何传递javascript Date对象,并以某种方式将其转换/编组为.NET DateTime类。

显然,我可以通过string并解析它,但这不是重点。我只是好奇我怎么能用javascript Date和.NET DateTime来做?

3 个答案:

答案 0 :(得分:3)

您可以利用Javascript中的dates表示为自UNIX epoch(1970-01-01 00:00:00 UTC)以来经过的毫秒数这一事实。使用valueOf()方法从Date对象中获取该值:

var millisecondsSinceEpoch = yourDate.valueOf();

如果您可以将该值作为double封送到C#,则可以使用其构造函数和AddMilliseconds()方法创建相应的DateTime对象:

DateTime yourDateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    .AddMilliseconds(millisecondsSinceEpoch);

答案 1 :(得分:1)

我为我的项目找到了更好的解决方案。

在javascript中:

var date = new Date();
myComObject.DoSomething(date.getVarDate());

在C#中

[ComVisible(true)]
public class Foo
{
    public void Bar(DateTime dateTime)
    {
        Console.WriteLine(dateTime);
    }
}

答案 2 :(得分:0)

我终于开始工作了。我不知道为什么,但我无法将其与dynamic一起使用。这是解决方案:

[ComVisible(true)]
public class Foo
{
    public void Bar(object o)
    {
        var dateTime = (DateTime)o.GetType().InvokeMember("getVarDate", BindingFlags.InvokeMethod, null, o, null);
        Console.WriteLine(dateTime);
    }
}