К сожалению, вы не можете вызывать методы объекта из коробки, используя WebBrowser.Document.InvokeScript.
Решение заключается в предоставлении глобальной функции на стороне JavaScript, которая может перенаправить ваш вызов. В наиболее упрощенной форме это будет выглядеть так:
function invoke(method, args) {
// The root context is assumed to be the window object. The last part of the method parameter is the actual function name.
var context = window;
var namespace = method.split('.');
var func = namespace.pop();
// Resolve the context
for (var i = 0; i < namespace.length; i++) {
context = context[namespace[i]];
}
// Invoke the target function.
result = context[func].apply(context, args);
}
В вашем .NET-коде вы должны использовать это следующим образом:
var parameters = new object[] { "obj.method", yourArgument };
var resultJson = WebBrowser.Document.InvokeScript("invoke", parameters);
Поскольку вы упоминаете, что вы ничего не можете изменить в своем существующем коде JavaScript, вам придется каким-то образом вставить вышеупомянутый метод JavaScript. К счастью, элемент управления WebBrowser также может помочь вам, вызвав метод eval ():
WebBrowser.Document.InvokeScript("eval", javaScriptString);
Для более надежной и полной реализации см. Инструменты WebBrowser , которые я написал, и статью, объясняющую ScriptingBridge , специально предназначенную для решения описанной проблемы.