我有一个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#代码中的任何特殊内容吗?
答案 0 :(得分:0)
尝试传入一个空的System.object数组作为InvokeScript的第二个参数,然后调用test.run();
答案 1 :(得分:0)
事实证明,“动态”关键字不够聪明,不能出于某种原因弄清楚这一点。你可以做的是将从InvokeScript返回的COM对象转换为IExpando(或IReflect)并调用InvokeMember方法。我创建了一个继承自DynamicObject的类,它覆盖所有TryXYZ方法并将它们转换为IReflect / IExpando方法调用。然后,您可以像上面的代码段那样与对象进行交互。