2010-06-16 57 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

相關問題