【问题标题】:Passing javascript Date object to C# WebBrowser control using window.external使用 window.external 将 javascript Date 对象传递给 C# WebBrowser 控件
【发布时间】:2011-04-14 10:52:49
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以利用 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);
    

    【讨论】:

    • 我可以这样做,但我只是在寻找如何在 C# 中读取 javascript Date 对象的解决方案。我什至不确定这是否可能,但如果不是,那也没关系。但我希望有办法做到这一点。
    • C# 中没有“Javascript 日期对象”
    • 据我了解,当我将 Date 对象传递给 C# 时,它是使用 COM 编组的,所以我想可以做到。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      在javascript中:

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

      在 C# 中

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

      【讨论】:

      • 当然有可能,但我想知道如何做到这一点,而无需在 javascript 中调用 getVarDate
      猜你喜欢
      • 2014-06-19
      • 1970-01-01
      • 2014-06-22
      • 2019-05-25
      • 2018-06-21
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 2011-12-30
      相关资源
      最近更新 更多