2010-06-16 60 views
1

我想通过一个关联数组(或简单地将属性名为&值的对象)传递给我的ActiveXObject。我无法找到任何成功的人,只需将JavaScript中的复杂数据传递给ActiveX对象即可。如何将javascript中的关联数组参数传递给ActiveX对象?

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

没有一个简单的方法这样做,我正在考虑对数据进行网址编码并将其作为字符串发送。但是,如果可能只是传递一个对象,那看起来有点愚蠢。

中的ActiveX对象在C#编码,如果说有什么区别...

回答

2

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

要将数据从ActiveXObject发送到JavaScript,只需使用StringBuilder或类似的格式将数据格式化为JSON即可。

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

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

+0

+1:请注意,我们现在可以使用JavaScriptSerializer。可以避免对ActiveXObject的额外依赖。我想知道为什么这没有得票。感谢这个简单的解决方案,我没有想到。 – naveen 2013-11-23 19:19:31

1

我的ActiveX/JavaScript的知识是有点过时,但这样是的ActiveX ...

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

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

+0

谢谢。我想在我的情况下,它会更快地使用name = value&anothername = anothervalue字符串。但是很高兴知道,我不应该花费几个小时寻找解决方案,让我使用复杂的对象。 – Rory 2010-06-16 20:59:57

0

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

1

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

+0

我没有尝试过,但听起来像是一个很好的解决方案。 – Rory 2010-09-16 18:57:52

相关问题