How to call a jQuery function from .NET WebBrowser control using InvokeScript()?

GuyWithDogs picture GuyWithDogs · Feb 8, 2012 · Viewed 13.5k times · Source

Had a Windows Forms app using a WebBrowser control (.NET 4) to load a web page that communicated with the app. I had a call to InvokeScript() to call a Javascript routine in the web page at one point.

Now things have been "updated", and jQuery is now being used. So instead of having a OnVenueSelected() function to call, it's now some $.city.venue.onVenueSelected: function(param) oddity.

Simply changing my call from InvokeScript("OnVenueSelected", new object[] { params }) to InvokeScript("$.city.venue.onVenueSelected", new object[] { params }) did not work. I don't get any observable errors or exceptions, but the logic in the call is not invoked.

Some digging around had me trying to use eval as the call and passing the function name and parameters as the string to eval. That didn't work either.

Is there a known way to invoke a function that's embedded in a couple of layers of jQuery magic?

Thanks.

Answer

GuyWithDogs picture GuyWithDogs · Feb 8, 2012

OK - I get to answer my own question. Thanks in part to the answer by at How to call a jQuery function from .NET WebBrowser control using InvokeScript()?, I was able to change my call to the jQuery function to

string[] codeString = { String.Format(" {0}('{1}') ", @"$.city.venue.onVenueSelected", result.ToString()) };
this.myBrowser.Document.InvokeScript("eval", codeString);

Amazingly enough, this seems to be working.

In my case, the result variable is of type bool (in case that matters to anyone).