Возврат массива из компонента ActiveX в JavaScript - PullRequest
0 голосов
/ 18 января 2010

У меня есть компонент ActiveX (который я не написал и не могу контролировать). У меня есть несколько методов, которые я хочу использовать, которые возвращают массивы. Каждый раз, когда я пытаюсь сделать что-то в этом роде:

var arrayValue = axObj.methodWhichReturnsArray();

объект arrayValue не определен. Поставщик компонента говорит мне, что у меня не должно быть проблем, которые я описываю. Я выполняю нулевую проверку, которую он пропускает (то есть axObj не равен нулю).

Поставщик компонента, однако, использует JScript, а не JavaScript, в своем примере, который выглядит примерно так:

var arrayVar = axComponent.getListAsArray();
var theArray = (new VBArray(arrayVar)).toArray();
alert(theArray[0]);
alert(theArray[1]);
alert(theArray[2]); 

Но опять же, я использую JavaScript (и никогда не использовал JScript), поэтому не уверен, в чем разница ...

(А я опытный ветеран Java, так что все это расстраивает.)

Спасибо!

1 Ответ

2 голосов
/ 18 января 2010

JScript - это версия Javascript от Microsoft, написанная «назад в день», и она до сих пор набирает силу.

Первый вопрос: где вы пытаетесь его использовать?В браузере?Intranet?Только IE?На стороне сервера?

JScript недоступен ни для чего, кроме IE или на сервере IIS Server или настольном компьютере MS, поэтому я надеюсь, что вы используете его на одном из вышеперечисленных.

JScript имеетспециальная функция для преобразования массивов VBScript в массивы JScript (поскольку они хранятся по-разному), которая является функцией VBArray в вашем коде.

Вы можете обойти это, используя JScript Enumerator http://msdn.microsoft.com/en-us/library/6ch9zb09(VS.85).aspx

Что-то вроде (хотя и не проверено):

var fso = new ActiveXObject("Scripting.FileSystemObject");
var e = new Enumerator(fso.Drives);
var myArray = [];
do {
 myArray.push( e.item() );
 e.moveNext();
} while ( !e.atEnd() );

document.write( myArray.join( "<li>" );
...