Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#访问JavaScript数组元素(通过WebBrowser)?_C#_Javascript_Com_Browser - Fatal编程技术网

从C#访问JavaScript数组元素(通过WebBrowser)?

从C#访问JavaScript数组元素(通过WebBrowser)?,c#,javascript,com,browser,C#,Javascript,Com,Browser,在表单上使用WebBrowser并通过window.external从Javascript调用C。在函数中传递类的Javascript数组: var x = []; x.push(classa); x.push(classa); window.external.CSharpFunction(x); 我可以通过以下方法成功获得C#中的x.length: 我的问题是如何得到x[0]和x[1]? 我试过了 x.GetType().InvokeMember(string.Empty, Binding

在表单上使用WebBrowser并通过window.external从Javascript调用C。在函数中传递类的Javascript数组:

var x = [];
x.push(classa);
x.push(classa);

window.external.CSharpFunction(x);
我可以通过以下方法成功获得C#中的x.length:

我的问题是如何得到x[0]和x[1]? 我试过了

x.GetType().InvokeMember(string.Empty, BindingFlags.GetProperty, null, x, new object[1]{1});

这两种方法都会在WebBrowser控件中引发错误


谢谢

请看这个问题:

我还尝试从数组中对象的属性中检索值,但没有成功。检索数组中的简单值(如字符串和整数)很容易,但对于复杂对象却没有什么好运气

您的最佳选择(IMO)是实施与上述SO问题类似的解决方案。不要直接传递数组,而是构建一个可以从C#调用的Javascript方法,该方法将返回数组中指定索引处的对象。像这样:

C#

public函数(动态长度)
{
for(int i=0;i
HTML/JavaScript

<script type="text/javascript">

var x = [];
x.push({MyClassValue: "Hello"});
x.push({MyClassValue: "People"});

function test() {
  window.external.CSharpFunction(x.length);
}

function getObj(i) {
  return x[i];
}

</script>
<button onclick="test();" />

var x=[];
x、 push({MyClassValue:“Hello”});
x、 push({MyClassValue:“People”});
功能测试(){
window.external.csharp函数(x.length);
}
函数getObj(i){
返回x[i];
}

是否尝试调用“0”成员?(就像“length”成员一样。)不:“0”也会导致错误。我试图避免这种情况,但它看起来是目前最简单的结果。我刚刚加入了一个简单的JavaScript函数:
函数GetItem(array,index){return array[index]}
并从C#调用:
\u webBrowser.Document.InvokeScript(“GetItem”,新对象[2]{array,index})
x.GetType().InvokeMember(string.Empty, BindingFlags.InvokeMethod | BindingFlags.Default, null, x, new object[1]{0});
public void CSharpFunction(dynamic length)
{
    for (int i = 0; i < length; i++)
    {
        dynamic obj = webBrowser1.Document.InvokeScript("getObj", new object[] { i });

        string val = obj.MyClassValue;
    }
}
<script type="text/javascript">

var x = [];
x.push({MyClassValue: "Hello"});
x.push({MyClassValue: "People"});

function test() {
  window.external.CSharpFunction(x.length);
}

function getObj(i) {
  return x[i];
}

</script>
<button onclick="test();" />