********************************************************************
* 著作權聲明
*
* 本文以Creative Commons的發布,請嚴格遵循該授權協議。
* 本文首發於部落格園, 此聲明為本文章中不可或缺的一部分。
* 作者網名: 浪子
* 作者EMAIL:dayichen (at)163.com
* 作者BLOG: Http://Www.Cnblogs.Com/Walkingboy
*
********************************************************************
[Silverlight探秘]利用Javascript調用silverlight的方法
-Written by 浪子@cnblogs.com (07-06-19)
摘要:
在引入sl的時候,我最關心的是,如何和現有的很多成熟代碼結合?或者說如何在兩者之間進行互動。
本文從js如何調用silverlight的方法入手,接下來再學習如何從silverlight調用js方法,慢慢深入學習它們兩者之間的互動知識
本文環境:
- Codename Orcas Beta1
- Silverlight 1.1 Alpha
- IE 6.0
建立Silverlight工程:
編寫Silverlight的託管方法:
當然silverligh可以使用多種託管語言,我這裡使用c#。
public partial class Page : Canvas{public void Page_Loaded(object o, EventArgs e){// Required to initialize variablesInitializeComponent();}public string SayHello(string name){return "hello," + name;}}
這裡我們只在原來的基礎上定義了一個public 的方法SayHello,返回一string
要讓用戶端可以訪問到這個方法,需要做以下工作:
1、引入System.Windows.Browser;
using System.Windows.Browser;
2、為類和方法貼上標籤
[Scriptable]public partial class Page : Canvas{public void Page_Loaded(object o, EventArgs e){// Required to initialize variablesInitializeComponent();}[Scriptable]public string SayHello(string name){return "hello," + name;}}
3、在Canvas建立的時候,為這個類註冊一個用戶端訪問執行個體
public Page(){WebApplication.Current.RegisterScriptableObject("LangZi", this);}
最終代碼如下:
[Scriptable]
public partial class Page : Canvas
{
public Page()
{
WebApplication.Current.RegisterScriptableObject("LangZi", this);
}
public void Page_Loaded(object o, EventArgs e)
{
// Required to initialize variables
InitializeComponent();
}
[Scriptable]
public string SayHello(string name)
{
return "hello," + name;
}
}
使用Javascript調用SayHello:
1、擷取Canvas的執行個體引用
var control = document.getElementById("SilverlightControl");
擷取Canvas的dom容器元素。
2、擷取Page的執行個體引用 ,注意剛才我們註冊的執行個體名稱”LangZi“
var manage = control.Content.LangZi;
3、調用方法SayHello:
alert(manage.SayHello(name));
有了這種溝通方式,以前很多在javascript裡運算的函數,可能就可以放到Managed 程式碼裡進行運算,可能會提高很大的效率哦。
不過這個傳回值不知道支援到何種程度(返回自訂類是否被轉換為json格式?),還有待進一步測試。
本文的測試代碼:JavascriptCallSilverlight.rar