2010-01-18 2 views
0

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

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

Какой браузер (ы) вы пытаетесь это на? – JonoW

+1

Если вы находитесь в IE, вы * используете * JScript, а не JavaScript (это реализация Mozilla). Конструктор VBArray должен быть доступен. – bobince

+0

p. что «JScript» - это просто имя, которое Microsoft использует для интерпретатора, который запускает то, что все остальные называют «Javascript» – Pointy

ответ

2

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>");