2

WebBrowser コントロールがあります。head タグに JavaScript を追加しました。アラートを追加すると、期待どおりに機能していることがわかります。このjs内で関数を作成し、そのプロトタイプにいくつかのメンバーを次のように追加しています:

function test() {
}

test.prototype.run = function() {
    alert('success!')
}

function createTest() {
    return new test()
}

次に、C# の内部に戻ります。

dynamic test = this.browser.InvokeScript("createTest");
test.run();

テスト オブジェクトが ComObject であることがわかりますが、run() を呼び出しても何も起こりません。エラーは発生しませんが、何も起こりません。このタイプのカスタムオブジェクトを呼び出す方法を知っている人はいますか?

また、createTest() メソッドを削除したいとします。C# からテストの新しいインスタンスを作成するにはどうすればよいでしょうか?

また、ボーナス ポイントとして、C# コードにコールバックするように、このカスタム オブジェクト (たとえば「完全な」メンバー) にイベントをアタッチすることについて知っておく必要がある特別なことはありますか?

4

2 に答える 2

0

「動的」キーワードは、何らかの理由でこれを理解するのに十分賢くないことがわかりました。できることは、InvokeScriptから返されたCOMオブジェクトをIExpando(またはIReflect)にキャストし、InvokeMemberメソッドを呼び出すことです。すべてのTryXYZメソッドをオーバーライドし、それらをIReflect/IExpandoメソッド呼び出しに変換するDynamicObjectから継承するクラスを作成しました。次に、上記のスニペットのようにオブジェクトを操作できます。

于 2011-01-21T23:04:16.903 に答える
0

InvokeScript の 2 番目の引数として空の System.object 配列を渡してから、test.run(); を呼び出してみてください。

于 2010-06-18T12:29:55.127 に答える