【问题标题】:How to pass associative Array parameter from javascript to ActiveX object?如何将关联数组参数从 javascript 传递给 ActiveX 对象?
【发布时间】:2010-06-16 20:04:00
【问题描述】:

我想将一个关联数组(或简单的具有属性名称和值的对象)传递给我的 ActiveXObject。我找不到任何成功且简单地将复杂数据从 javascript 传递到 ActiveX 对象的人。

我的 ActiveX 对象正在 IE 中加载,它是我的,所以我可以将方法签名和代码更改为任何可行的方法。我还可以控制 javascript 的结构。

如果没有一种简单的方法,我正在考虑对数据进行 url 编码并将其作为字符串发送。但是,如果可以只传递一个对象,那似乎有点傻。

ActiveX 对象是用 C# 编码的,如果这有什么不同的话...

【问题讨论】:

    标签: .net javascript com activex


    【解决方案1】:

    我发现最好的方法是来回发送 JSON 字符串。这对于简单数据和复杂数据都非常简单。

    要将数据从 ActiveXObject 发送到 javascript,只需使用 StringBuilder 或类似工具将数据格式化为 JSON。

    要将数据从 javascript 发送到 ActiveXObject,请使用 javascript 中的 JSON 库对数据进行编码,然后使用 .net 中的 JSON 解析器(如 JSON.Net)来读取它。

    或者,对于您不需要 JSON 解析器的真正简单情况,您可以使用 URL 编码的字符串。

    【讨论】:

    • +1:请注意我们现在可以使用 JavaScriptSerializer。可以避免对 ActiveXObject 的额外依赖。我想知道为什么这没有投票。感谢这个我没有想到的简单解决方案。
    【解决方案2】:

    我的 ActiveX/JavaScript 知识有点过时了,但 ActiveX 也是...

    理想情况下,您希望传入一个用作关联数组的Object。但是 COM 不识别这种类型。 COM 确实支持SafeArrays,但它们不被 JavaScript 理解。

    我们最终要么发送join()ed 字符串,要么发送简单的Xml 文档。您可能不需要 DOM 来生成 xml,并且在接收端,您可以将它们直接提供给您最喜欢的 Xml Api(在 C# 中,我推荐 XDocument)。

    【讨论】:

    • 谢谢。我想在我的情况下,只使用 name=value&anothername=anothervalue 字符串会更快。但很高兴知道我不应该花几个小时寻找一个让我使用复杂对象的解决方案。
    【解决方案3】:

    最快的方法可能是使用可以通过 JScript 访问的Scripting.Dictionary COM 对象,然后在您的 C# 项目中包含对它的引用(如果未列出,它将在 scrrun.dll 中),然后指定IDictionary 接口(不是 System.Collections 之一,是导入的 COM 库中的那个)作为函数的参数。然后你就有了一个键值关联字典供你使用。

    【讨论】:

    • 我没有尝试过,但这听起来是个不错的解决方案。
    【解决方案4】:

    已经有一段时间了,但我记得用 SafeArrays 和 VBArray 对象做了类似的事情。这是一个 Microsoft Jscript 特定的实现,但由于您使用的是 ActiveX,因此可能值得研究一下。

    【讨论】:

      猜你喜欢
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2018-07-29
      • 2014-10-12
      • 2016-07-11
      相关资源
      最近更新 更多