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

前端 未结 3 486
予麋鹿
予麋鹿 2020-12-19 05:41

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 Javascri

相关标签:
3条回答
  • 2020-12-19 05:55

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

    0 讨论(0)
  • 2020-12-19 06:09

    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"
    
    0 讨论(0)
  • 2020-12-19 06:09

    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

    0 讨论(0)
提交回复
热议问题