从C#访问JavaScript数组元素(通过WebBrowser)?
在表单上使用WebBrowser并通过window.external从Javascript调用C。在函数中传递类的Javascript数组:从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
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();" />