Вопрос

Я пытаюсь вызвать метод С# из JavaScript, используя ActiveXObject:

var myobj = new ActiveXObject('myobject');
var arr = myobj.GetArray();

В конце концов, arr будет содержать SAFEARRAY объект, но не JScript множество.Есть ли способ вернуть собственный объект JavaScript из метода С#?

Это было полезно?

Решение 2

Я нашел решение самостоятельно, но документации для этой части не существует. Решение состоит в том, чтобы использовать JScript.ArrayObject следующим образом:

ArrayObject _lastField;
byte[] byteArray = new byte[]{2,1,2,3};
object[] array = new object[byteArray.Length];
byteArray.CopyTo(array, 0);
_lastField = Microsoft.JScript.GlobalObject.Array.ConstructArray(array);

После этого вы сможете использовать массив _lastField в JavaScript как собственный массив:

var myobj = new ActiveXObject('myobject');
var arr = myobj.LastField;
alert(arr[1]);

Другие советы

Вы можете вернуть JSON строку, а затем проанализировать ее в объект JavaScript.Существует ряд .NET-библиотек для сериализации объектов .NET в JSON и наоборот.

назвать несколько.

Этот вопрос и ответ может быть вам полезен

Вы можете вернуть разделенную объединенную строку в C # и можно разбить на JavaScript

//C#
public string getArryString()
{
string[] arrstring = new string[]{"1","2","3"};
return string.Join(",", arrstring);
}

//Javascript
var arrstring = objActiveX.getArryString().split(',');

Через VBArray это может работать так:

  1. Верните объект[] из C# (объявьте это в интерфейсе dispinterface).

  2. Чтобы получить собственный массив JS в JScript, используйте VBArray:

    var jsArray = new VBArray(myobj.GetArray()).toArray();
    for (i = 0; i < jsArray.length; i++) 
    {
       // use jsArray[i]
    }
    

Исходная информация:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top