如何将关联数组参数从javascript传递给ActiveX对象?

时间:2010-06-16 20:04:00

标签: .net javascript com activex

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

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

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

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

4 个答案:

答案 0 :(得分:2)

我发现执行此操作的最佳方法是将JSON字符串发回&向前。这对于简单数据和复杂数据都非常简单。

要将ActiveXObject中的数据发送到javascript,只需使用StringBuilder或类似方法将数据格式化为JSON。

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

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

答案 1 :(得分:1)

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

理想情况下,您希望传入用作关联数组的Object。但COM不承认这种类型。 COM确实支持SafeArray,但JavaScript无法理解它们。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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