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

醉酒当歌 提交于 2019-11-29 10:19:21
GuyWithDogs

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).

For those that may not be aware, you can also use .execScript in pre-.NET versions of WB control and current/.NET versions of WB control. You can also choose the language of the script you want to execute, ie: "JScript" or "VBScript". Here is the one liner:

WebBrowser1.Document.parentWindow.execScript "alert('hello world');", "JScript"
quetzalcoatl

Yeah, that is probably the quickest way to do that, because the 'invokescript' simply needs to be given a name of a global function. So after pushing the functions down deeper into some structures, and to still be able to call them via InvokeScript in a "more pretty" way, you would have to, for example, write a single GLOBAL wrapper (a 'dispatcher' would be a better name), similar to the:

function callme(what, args) {
   var actualfunction = eval(what);   // or any other way to parse the 'what' and get a function
   return actualfunction(args);
}

and later call it:

  • from JS:

    callme("$.city.venue.onVenueSelected", ..args..)
    

    (but I truly dont know why you could want to call it from JS :))

  • and from CS:

    browser.InvokeScript("callme", new string[]{ "$.city.venue.onVenueSelected", ..args.. })
    

this way, I think you would be able to pass objects as function arguments directly, without stringifying them

..but from my experience, in >80% of the cases, you just need to pass some simple numbers and strings or setup flags, so all that hassle is usually just a code bloat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!