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

來源:互聯網
上載者:User

 

********************************************************************
*                                                 著作權聲明
*
* 本文以Creative Commons的發布,請嚴格遵循該授權協議。
* 本文首發於部落格園, 此聲明為本文章中不可或缺的一部分。
* 作者網名:    浪子
* 作者EMAIL:dayichen (at)163.com
* 作者BLOG:  Http://Www.Cnblogs.Com/Walkingboy
*
********************************************************************

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

-Written by 浪子@cnblogs.com  (07-06-20)

摘要:

在上文[Silverlight探秘]利用Javascript調用silverlight的方法中,我們探討了,如何利用javascript來調用silverlight的託管方法。這個相對來說比較好辦些,因為Silverlight畢竟相容DOM的object方式調用,但是反過來就比較麻煩了,因為javascript設計者不可能那麼早就想到為silverlight開個介面:)

本文環境:

  • Codename Orcas Beta1
  • Silverlight 1.1 Alpha
  • IE 6.0

思路:

即然沒辦法從Silverlight直接調用javascript對象,那我們只能從和它們都有關係的DOM的object調用上下手了。要實現互操作,首先Silverlight必須提供一個可供javascript操作的對象,也就是[Silverlight探秘]利用Javascript調用silverlight的方法中我們所提到[Scriptable]標籤,但是單單這樣子還是不夠的。我們這裡的情境是Silverlight只提供的函數定義,而javascript執行個體函數實現,然後在Silverlight裡面調用。想想這個情境,跟我們以前的什麼應用有點類似哦,沒錯就是委託(或者使用事件Event)。即然情境類似,我們就動手測試下,看是否行得通。

編寫Silverlight的託管方法:

[Scriptable]public partial class Page : Canvas{public Page(){//註冊用戶端執行個體WebApplication.Current.RegisterScriptableObject("LangZi", this);}public void Page_Loaded(object o, EventArgs e){// Required to initialize variablesInitializeComponent();//註冊按鈕事件
            btnCallScript.MouseLeftButtonUp += new MouseEventHandler(btnCallScript_MouseLeftButtonUp);}void btnCallScript_MouseLeftButtonUp(object sender, MouseEventArgs e){if (CallScript != null){//CallScript(this, new MyEventArgs("called by server!"));CallScript(this, EventArgs.Empty);}}//註冊用戶端可訪問的事件定義[Scriptable]public event EventHandler CallScript;}
跟上文相比,這裡只是把SayHello換成了Event而已,其他沒有太大的變化
用戶端注入方法到事件上:
function createSilverlight(){Sys.Silverlight.createObjectEx({source: "Page.xaml",parentElement: document.getElementById("SilverlightControlHost"),id: "SilverlightControl",properties: {width: "100%",height: "100%",version: "0.95",enableHtmlAccess: true},events: {onLoad: OnLoaded}});}function OnLoaded(sender,args){//debugger;sender.Content.LangZi.CallScript = OnCallScript;}function OnCallScript(sender, args){//debugger;alert("Running!");}
擴充思路:
這裡用的是最普通的EventHandler,是否支援自訂的EventHandler,支援到什麼程度,有待進一步研究。
本文測試代碼:SilverlightCallJavascript.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.