Thursday 7 June 2012

Invoking JavaScript function from WinForms

I've been working on application that needs to load page and display it in WebBrowser control. Requirement was to allow interaction between WinForms application and web page.
Here I will show a sample application where JavaScript function is called from WinForms application.
For this Blog I will be using Google Web elements , Google Web Elements allow you to easily add your favorite Google products to your website.
Process can be described by following steps:
Create Windows Forms application
Drop WebBrowser control into Form
Create Html with JavaScript function you want to call
Calling JavaScript function from WinForms application isn't so difficult.
.NET WebBrowser control has property Document which gets an HtmlDocument representing the Web page currently displayed in the WebBrowser control.
Well this javascript part is not well written ,maybe my Web God-Like Buddy (Rustan)) can clean this mess..lol
anyway here's the script
JAVASCRIPT
  1. <script type="text/javascript">
  2. google.load("elements", "1", {packages: "keyboard"});
  3. var kbd;
  4. function onLoad() {
  5. var content = document.getElementById('content');
  6. // Create the HTML for out text area
  7. content.innerHTML = '<div>' +
  8. 'Demo of Invoking JavaScript using .NET' +
  9. '.</div>' +
  10. '<textarea id="t1" cols="47" rows="7"></textarea>';
  11. kbd = new google.elements.keyboard.Keyboard(
  12. [google.elements.keyboard.LayoutCode.ENGLISH],
  13. ['t1']);
  14. }
  15. function ChangeLayout() {
  16. var LayOut=document.getElementById('txtLang').value;
  17. kbd.setLayout(LayOut);
  18. }
  19. function toggleVisible() {
  20. if (kbd.isVisible()) {
  21. kbd.setVisible(false);
  22. } else {
  23. kbd.setVisible(true);
  24. }
  25. }
  26. google.setOnLoadCallback(onLoad);
  27. </script>
So how can you call JavaScript functions in your WebBrowser control? Call the InvokeScript method on the HtmlDocument.
.NET CODE (winforms)
  1. Sub SHOW_HIDE_VIR_KEYBOARD()
  2. With Me.WBrowser
  3. .Document.InvokeScript("toggleVisible", New Object() {""}) 'call the javascript from the .htm files
  4. End With
  5. End Sub
  6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdShow.Click
  7. SHOW_HIDE_VIR_KEYBOARD()
  8. End Sub
  9. Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
  10. With Me.WBrowser
  11. .Document.GetElementById("txtLang").InnerText = Trim(Me.ComboBox1.Text) 'parse data from winforms to Htm files
  12. .Document.InvokeScript("ChangeLayout", New Object() {""}) 'call the javascript from the .htm files
  13. End With
  14. End Sub
Conclusions:
With the ability to call JavaScript from .NET App you can now embed and extend web applications into native applications with ease. A native application gives you more control over the environment and access to computer resources that you cannot access from a web page. You can Mashup web applications with computer hardware or software in new and interesting ways.
For the complete sample please download the demo project
For questions just Contact me @ the Addresses below:
Download Code: 
Sample Project
Facebook Fan Page



comments

No comments:

Post a Comment