Как передать ассоциативный параметр Array из JavaScript в объект ActiveX? - PullRequest
1 голос
/ 17 июня 2010

Я бы хотел передать ассоциативный массив (или просто объект с именами и значениями свойств) в мой ActiveXObject. Я не могу найти никого, кто бы успешно и просто передавал сложные данные из JavaScript в объект ActiveX.

Мой объект ActiveX загружается в IE, и он мой, поэтому я могу изменить сигнатуру и код метода на любой, который будет работать. У меня также есть контроль над структурой JavaScript.

Без простого способа сделать это я думаю о кодировании URL-адресов данных и их отправке в виде строки. Но это кажется немного глупым, если можно просто передать объект.

Объект ActiveX кодируется в C #, если это имеет какое-либо значение ...

Ответы [ 4 ]

2 голосов
/ 16 сентября 2010

Я нашел лучший способ сделать это - отправлять строки JSON туда-сюда.Это очень просто как для простых, так и для сложных данных.

Чтобы отправить данные из ActiveXObject в javascript, просто используйте StringBuilder или аналогичный для форматирования данных в формате JSON.

Чтобы отправить данные из javascript в ActiveXObject, используйте библиотеку JSON в javascript для кодирования данных, затем используйте анализатор JSON в .net, например JSON.Net , чтобы прочитать его.

В качестве альтернативы для реальных простых случаев, когда вам не нужен анализатор JSON, вы можете использовать строки в кодировке URL.

1 голос
/ 27 июля 2010

Возможно, самый быстрый способ - использовать COM-объект Scripting.Dictionary , к которому можно получить доступ через JScript, а затем включить ссылку на него в проект C # (если он не указан, он будет в scrrun .dll) затем укажите интерфейс IDictionary (не System.Collections one, тот из импортированной библиотеки COM) в качестве параметра вашей функции. Тогда в вашем распоряжении ассоциативный словарь ключ-значение.

1 голос
/ 17 июня 2010

Мои знания ActiveX / JavaScript немного устарели, но ActiveX ...

В идеале вы хотите передать Object, который вы используете в качестве ассоциативного массива.Но COM не распознает этот тип.COM поддерживает SafeArray s, но JavaScript их не понимает.

В итоге мы либо отправили join() ed строки, либо отправили простые XML-документы.Вам, вероятно, не нужен DOM для производства XML, и на стороне получения вы можете передать их прямо в ваш любимый API Xml (в C # я рекомендую XDocument).

0 голосов
/ 17 июня 2010

Это было давно, но я помню, что делал нечто подобное с SafeArrays и объектом VBArray . Это специфическая реализация Microsoft Jscript, но, поскольку вы используете ActiveX, возможно, стоит посмотреть.

...