[Silverlight探秘]利用Javascript調用silverlight的方法

來源:互聯網
上載者:User

 

********************************************************************
*                                                 著作權聲明
*
* 本文以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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.