【问题标题】:Special case when calling InvokeScript with WebBrowser control使用 WebBrowser 控件调用 InvokeScript 时的特殊情况
【发布时间】:2010-04-20 10:50:25
【问题描述】:

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

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

从 javascript 中调用 holder.DoA 时可以正常工作,但是当我尝试从我的 C# 代码中调用它时,该函数未成功调用,如下所示:

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    我遇到了同样的问题,我让它像这样工作:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我试过了,还是不行:m_webBrowser.Document.InvokeScript("window.holder.DoA");
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-19
        • 1970-01-01
        • 2016-10-23
        相关资源
        最近更新 更多