在窗体上使用 WebBrowser 并使用 window.external 从 Javascript 调用 C#。在函数中传入一个 Javascript 类数组:
var x = [];
x.push(classa);
x.push(classa);
window.external.CSharpFunction(x);
我可以在 C# 中成功获取 x.length:
int length=(int)x.GetType().InvokeMember("length", BindingFlags.GetProperty, null, x, null);
我的问题是如何获得 x[0] 和 x[1]? 我试过了
x.GetType().InvokeMember(string.Empty, BindingFlags.GetProperty, null, x, new object[1]{1});
和
x.GetType().InvokeMember(string.Empty, BindingFlags.InvokeMethod | BindingFlags.Default, null, x, new object[1]{0});
两者都会触发 WebBrowser 控件中的错误。
谢谢
最佳答案
请看这个问题:
Accessing properties of javascript objects using type dynamic in C# 4
我也曾尝试从数组中对象的属性中检索值,但没有成功。检索数组中的简单值(例如字符串和整数)很容易,但对于复杂对象就没有运气了。
您最好的选择 (IMO) 是实现与上述 SO 问题中的解决方案类似的解决方案。不是直接传递数组,而是构建一个可以从 C# 调用的 Javascript 方法,该方法将返回数组中指定索引处的对象。像这样:
C#
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;
}
}
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();" />
关于c# - 从 C#(通过 WebBrowser)访问 JavaScript 数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903750/