使用WebBrowser控件调用InvokeScript时的特殊情况

时间:2010-04-20 10:50:26

标签: c# javascript .net browser webbrowser-control

我正在尝试在WebBrowser控件上使用InvokeScript方法在已加载到我的WebBrowser控件中的网页上执行脚本。如果我只是调用一个简单的javascript函数,这可以正常工作。但是,我试图调用的javascript函数嵌套在这样的变量中:

var holder = 
{ 
    DoA: function() 
    {
         ....
    },
    DoB: function()
    {
         .....
    }
}

调用holder.DoA在javascript中调用时工作正常,但是当我尝试从我的C#代码中调用它时,函数调用不成功:

object obj1 = m_webBrowser.Document.InvokeScript("holder.DoA");

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我有同样的问题,我让它像这样工作:

m_webBrowser.Document.InvokeScript("eval", new object[] { "holder.DoA()" });

答案 1 :(得分:0)

您是否尝试过window.holder.DoA作为InvokeScript的参数?

答案 2 :(得分:0)

这是一个单独的JSON类。如果holder是全局变量,您可以通过调用IHTMLDocument::Script来获取它的参考。

我不确定Type.InvokeMember是否可以在JSON对象上工作,因为方法是在运行时添加的,请尝试从对象查询IDispatchEx接口来调用方法。