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

本文关键字:WebBrowser 控件 对象 external window javascript Date 使用 | 更新日期: 2023-09-27 17:50:15

我能够从WebBrowser WinForms控件中调用javascript window.externalWebBrowser.ObjectForScripting的c#方法,并通过string, int, bool等。然而,我不知道如何传递javascript Date对象,并以某种方式转换/封送它到。net DateTime类。

显然,我可以传递一个string并解析它,但这真的不是重点。我只是好奇我怎么能做到这一点与javascript Date和。net DateTime ?

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

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

var millisecondsSinceEpoch = yourDate.valueOf();

如果你可以封送该值到c#作为double,你可以创建适当的DateTime对象使用它的构造函数和AddMilliseconds()方法:

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

我终于把它修好了。我不知道为什么,但我无法使用它与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);
    }
}

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

在javascript:

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

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