9

Form で 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 コントロール内でエラーを発生させます。

ありがとう

4

1 に答える 1

5

このSOの質問をご覧ください:

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;
    }
}

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();" />
于 2012-06-06T13:15:54.420 に答える