Jam*_*ler 9 javascript c# browser com
在窗体上使用WebBrowser并使用window.external从Javascript调用C#.传入函数中的Javascript数组类:
var x = [];
x.push(classa);
x.push(classa);
window.external.CSharpFunction(x);
Run Code Online (Sandbox Code Playgroud)
我可以在C#中成功获取x.length:
int length=(int)x.GetType().InvokeMember("length", BindingFlags.GetProperty, null, x, null);
Run Code Online (Sandbox Code Playgroud)
我的问题是如何获得x [0]和x [1]?我试过了
x.GetType().InvokeMember(string.Empty, BindingFlags.GetProperty, null, x, new object[1]{1});
Run Code Online (Sandbox Code Playgroud)
和
x.GetType().InvokeMember(string.Empty, BindingFlags.InvokeMethod | BindingFlags.Default, null, x, new object[1]{0});
Run Code Online (Sandbox Code Playgroud)
这两个都触发了WebBrowser控件中的错误.
谢谢
请看这个问题:
使用C#4中的dynamic类型访问javascript对象的属性
我还试图从数组中的对象的属性中检索值,但没有成功.检索数组中的简单值(如字符串和整数)很容易,但对复杂对象没有好运.
您最好的选择(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;
}
}
Run Code Online (Sandbox Code Playgroud)
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();" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4734 次 |
| 最近记录: |