我正在尝试使用以下方法从 JavaScript 调用 C# 方法ActiveXObject
:
var myobj = new ActiveXObject('myobject');
var arr = myobj.GetArray();
最终,arr
将包含一个SAFEARRAY
对象,但不包含JScript
数组。有没有办法从 C# 方法返回本机 JavaScript 对象?
我正在尝试使用以下方法从 JavaScript 调用 C# 方法ActiveXObject
:
var myobj = new ActiveXObject('myobject');
var arr = myobj.GetArray();
最终,arr
将包含一个SAFEARRAY
对象,但不包含JScript
数组。有没有办法从 C# 方法返回本机 JavaScript 对象?
我自己找到了解决方案,但是这部分没有文档。解决方法是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]);
您可以在 C# 中返回分隔的连接字符串,并可以拆分为 JavaScript
//C#
public string getArryString()
{
string[] arrstring = new string[]{"1","2","3"};
return string.Join(",", arrstring);
}
//Javascript
var arrstring = objActiveX.getArryString().split(',');
通过 VBArray 它可以像这样工作:
从 C# 返回 object[](在 dispinterface 中声明)。
要在 JScript 中获取本机 JS 数组,请使用 VBArray:
var jsArray = new VBArray(myobj.GetArray()).toArray();
for (i = 0; i < jsArray.length; i++)
{
// use jsArray[i]
}
背景资料:
JScript 仅支持 SafeArrays of Variants http://blogs.msdn.com/b/jaiprakash/archive/2007/01/09/jscript-supports-safearrays-of-variants-only.aspx
Eric 的可编写脚本对象模型类型签名的完整指南 http://blogs.msdn.com/b/ericlippert/archive/2004/07/14/183241.aspx