使用WebBrowser.Document.InvokeScript调用javascript对象方法

Bra*_*zol 9 .net javascript c# browser winforms

在我的WinForms应用程序中,我需要从我的WebBrowser控件调用javascript函数.我使用了Document.InvokeScript,它与单独的功能完美配合,例如

Document.InvokeScript("function").
Run Code Online (Sandbox Code Playgroud)

但是当我想调用javascript对象方法时,例如

Document.InvokeScript("obj.method")
Run Code Online (Sandbox Code Playgroud)

它不起作用.有没有办法让它发挥作用?或者解决这个问题的方法不同?改变javascript代码中的任何内容!

提前致谢 :)

Sam*_*Sam 9

文档中的示例不包括括号.

private void InvokeScript()
{
    if (webBrowser1.Document != null)
    {
        HtmlDocument doc = webBrowser1.Document;
        String str = doc.InvokeScript("test").ToString() ;
        Object jscriptObj = doc.InvokeScript("testJScriptObject");
        Object domOb = doc.InvokeScript("testElement");
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试

Document.InvokeMethod("obj.method");
Run Code Online (Sandbox Code Playgroud)

请注意,如果使用HtmlDocument.InvokeScript方法(String,Object []),则可以传递参数.

编辑

看起来你不是唯一有这个问题的人:HtmlDocument.InvokeScript - 调用一个对象的方法.您可以像该链接的海报所示制作"代理功能".基本上你有一个调用你的对象功能的函数.它不是一个理想的解决方案,但它绝对有效.我会继续看看这是否可行.

关于同一问题的另一篇文章: 使用WebBrowser.Document.InvokeScript()搞乱外国JavaScript.C.Groß在CodeProject上提出的有趣解决方案:

private string sendJS(string JScript) {
    object[] args = {JScript};
    return webBrowser1.Document.InvokeScript("eval",args).ToString();
}
Run Code Online (Sandbox Code Playgroud)

您可以在HtmlDocument上创建一个扩展方法并调用它来运行您的函数,只使用这个新函数,您将包括括号,参数,传入的字符串中的整个九码(因为它只是传递给了一个eval) .

看起来HtmlDocument不支持在现有对象上调用方法.只有全球功能.:(