Invocare un metodo Silverlight da javascript
E' possibile far comunicare JavaScript con Silverlight in modo semplice.
In Silverlight è necessario:
e lato JavaScript
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)
- ottenere un riferimento all'oggetto Silverlight (document.getElementById)
- invocare il metodo interessato di 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);
}
}
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]