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

发布于 2024-11-01 19:34:44 字数 403 浏览 0 评论 0 原文

我可以使用 javascript window.externalWebBrowser WinForms 控件调用 WebBrowser.ObjectForScripting 的 C# 方法并传递 stringintbool 等。但是我不知道如何传递 javascript Date 对象并以某种方式将其转换/编组为 .NET <代码>日期时间类。

显然,我可以传递一个字符串并解析它,但这实际上不是重点。我只是好奇如何使用 javascript Date 和 .NET DateTime 来做到这一点?

I am able to call C# methods of WebBrowser.ObjectForScripting with javascript window.external from WebBrowser WinForms control and pass string, int, bool etc. However I don't know how to pass javascript Date object and somehow convert/marshal it to .NET DateTime class.

Obviously, I could pass a string and parse it, but this is really not the point. I'm just curious how could I do it with javascript Date and .NET DateTime?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

马蹄踏│碎落叶 2024-11-08 19:34:44

您可以利用 JavaScript 中的 日期 表示为自 UNIX 纪元(1970-01-01 00:00:00 UTC)以来经过的毫秒数。使用 valueOf() 方法从 < code>Date 对象:

var millisecondsSinceEpoch = yourDate.valueOf();

如果您可以将该值作为 double 封送至 C#,则可以使用其构造函数和 DateTime 对象="http://msdn.microsoft.com/en-us/library/system.datetime.addmilliseconds.aspx" rel="nofollow">AddMilliseconds() 方法:

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

You can take advantage of the fact that dates in Javascript are expressed as the number of milliseconds elapsed since the UNIX epoch (1970-01-01 00:00:00 UTC). Use the valueOf() method to obtain that value from a Date object :

var millisecondsSinceEpoch = yourDate.valueOf();

If you can marshal that value to C# as a double, you can create the appropriate DateTime object using its constructor and the AddMilliseconds() method:

DateTime yourDateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    .AddMilliseconds(millisecondsSinceEpoch);
树深时见影 2024-11-08 19:34:44

我终于让它工作了。我不知道为什么,但我无法将它与 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);
    }
}

I finally got it working. I don't know why, but I am unable to use it with dynamic. Here is the solution:

[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);
    }
}
甲如呢乙后呢 2024-11-08 19:34:44

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

在 JavaScript 中:

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

在 C# 中

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

I found better solution for my project.

in javascript:

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

in C#

[ComVisible(true)]
public class Foo
{
    public void Bar(DateTime dateTime)
    {
        Console.WriteLine(dateTime);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文