WebBrowser et COM « L’univers de Rawheadrex

WebBrowser et COM

Je suis présentement à la découverte du composant WebBrowser avec lequel j’essaie de le faire interagir avec une Form de mon application. Le tout par le biais de COM (Component Object Model). Rien de bien compliqué au premier abord. Voici le code que Micosoft suggère :

Imports System
  1. Imports System.Windows.Forms
  2. Imports System.Security.Permissions
  3.  _
  4.  _
  5. Public Class Form1
  6.     Inherits Form
  7.  
  8.     Private webBrowser1 As New WebBrowser()
  9.     Private WithEvents button1 As New Button()
  10.  
  11.      _
  12.     Public Shared Sub Main()
  13.         Application.EnableVisualStyles()
  14.         Application.Run(New Form1())
  15.     End Sub
  16.  
  17.     Public Sub New()
  18.         button1.Text = "call script code from client code"
  19.         button1.Dock = DockStyle.Top
  20.         webBrowser1.Dock = DockStyle.Fill
  21.         Controls.Add(webBrowser1)
  22.         Controls.Add(button1)
  23.     End Sub
  24.  
  25.     Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
  26.         Handles Me.Load
  27.  
  28.         webBrowser1.AllowWebBrowserDrop = False
  29.         webBrowser1.IsWebBrowserContextMenuEnabled = False
  30.         webBrowser1.WebBrowserShortcutsEnabled = False
  31.         webBrowser1.ObjectForScripting = Me
  32.         ' Uncomment the following line when you are finished debugging.
  33.         'webBrowser1.ScriptErrorsSuppressed = True
  34.  
  35.         webBrowser1.DocumentText = _
  36.             "<script type="text/javascript"><!–mce:0–></script><button> " &amp; _
  37.             "call client code from script code</button>" &amp; _
  38.             ""
  39.     End Sub
  40.  
  41.     Public Sub Test(ByVal message As String)
  42.         MessageBox.Show(message, "client code")
  43.     End Sub
  44.  
  45.     Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
  46.         Handles button1.Click
  47.  
  48.         webBrowser1.Document.InvokeScript("test", _
  49.             New String() {"called from client code"})
  50.  
  51.     End Sub
  52.  
  53. End Class

Bref, rien de bien compliquer. Mais voilà que quand je teste l’application, j’ai une erreur de script avec comme message que “window.external” est de référence NULL ou inatteignable. Finalement, la solution est vraiment bête. Dans les options de votre application (je suis sous VS2008) à partir de l’onglet “Application” cliquez sur “Informations de l’assembly…” et vous devez activer la case à cocher “Rendre l’assembly visible par COM” Et voilà! Tout fonctionne à merveille. Je vous invite à consulter l’aide du composant WebBrowser pour plus de détail sur le code et ce composant qui est très pratique pour afficher simplement une page web ou faire comme moi une interface dynamique entre une Form et une page Web.

Mots-clefs : , , ,



Laisser une réponse