[Ceci est écrit à l'heure où Silverlight est en v2 beta 1]
Appeler une fonction JavaScript d'une page HTML (ou aspx) depuis le code behind d'un objet Silverlight ?
C'est désormais très simple en Silverlight 2 (par rapport à la version alpha) !
Supposons que ma page aspx contienne ces 2 fonctions JavaScript :
<script type="text/javascript">
function AfficheMessage()
{
alert("Alert Js déclenchée depuis Silverlight 2");
}
function AfficheMessageParam(msg)
{
alert("Alert de Silverlight 2: " + msg);
}
</script>
J'ai créé un petit projet Silverlight avec 3 boutons pour tester l'appel des fonctions JavaScript depuis le code behind:

Mon petit projet de test
Dans votre code behind Silverlight (*.xaml.cs pour du C#) commencez par référencer ce namespace :
using System.Windows.Browser;
Appel simple:
/// <summary>
/// Appel de la fonction Js AfficheMessage de la page aspx
/// </summary>
private void btnFonctionJs_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.Invoke("AfficheMessage");
}
Appel avec paramètre(s):
/// <summary>
/// Appel de la fonction Js AfficheMessageParam de la page aspx
/// </summary>
private void btnFonctionJsParam_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.Invoke("AfficheMessageParam", new string[] { "Salut!" });;
}
Appel fonction Js anonyme inline :
/// <summary>
/// Appel de fonction anonyme Js inline
/// </summary>
private void btnJsInline_Click(object sender, RoutedEventArgs e)
{
HtmlPage.Window.Eval("(function(){ alert('Fonction anonyme Js inline depuis Silverlight 2'); })()");
}
Retrouvez le code complet en fichier joint.