E' possibile far comunicare JavaScript con Silverlight in modo semplice.

In Silverlight è necessario:
  • registrare il metodo l'oggetto per renderlo accessibile da JavaScript (HtmlPage.RegisterScriptableObject)
  • decorare i metodi che si vogliono rendere accessibili da JavaScript (ScriptableMember)
mentre lato JavaScript bisogna:
  • ottenere un riferimento all'oggetto Silverlight (document.getElementById)
  • invocare il metodo interessato di Silverlight
Quindi lato Silverlight

C#

using System.Windows.Browser;

namespace Sgart
{
  public partial class TestSL : UserControl
  {
    public TestSL ()
    {
      InitializeComponent();
      ...
      HtmlPage.RegisterScriptableObject("MyControlObject", this);
    }
    ...
   [ScriptableMember()]
   public void UpdateSL(string msg)
   {
      MessageBox.Show(msg);
   }
}
e lato JavaScript

JavaScript

var silver = document.getElementById("mySilverlight");
silver.Content.MyControlObject.UpdateSL("funziona!!!");

HTML

<object data="data:application/x-silverlight-2," id="mySilverlight" type="application/x-silverlight-2" width="100%" height="100%" >
  <param name="source" value="bin/debug/TestSL.xap"/>
  <param name="onError" value="onSilverlightError" />
  <param name="background" value="white" />
  <param name="minRuntimeVersion" value="3.0.40624.0" />
  <param name="autoUpgrade" value="true" />
  <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
    <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
  </a>
</object>
Presta attenzione se usi JQuery per accedere all'oggetto.
Essendo un wrapper dell'oggetto, non è possibile richiamare la proprietà Content direttamente, ma bisogna accedere al suo oggetto interno:

JavaScript

var silver = $("#mySilverlight");
silver[0].Content.MyControlObject.UpdateSL("funziona!!!");
nota l'indice [0]
Tags:
HTML74 JavaScript184 Silverlight7
Potrebbe interessarti anche: