使用window.external将javascript Date对象传递给c# WebBrowser控件
本文关键字:WebBrowser 控件 对象 external window javascript Date 使用 | 更新日期: 2023-09-27 17:50:15
我能够从WebBrowser
WinForms控件中调用javascript window.external
的WebBrowser.ObjectForScripting
的c#方法,并通过string
, int
, bool
等。然而,我不知道如何传递javascript Date
对象,并以某种方式转换/封送它到。net DateTime
类。
显然,我可以传递一个string
并解析它,但这真的不是重点。我只是好奇我怎么能做到这一点与javascript Date
和。net DateTime
?
您可以利用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);
}
}