My friends, my life, my style - James S.F. Hsieh

11/25/2009

Interop between Host, embedded browser, JavaScript and Silverlight

最近剛好有機會開發一些 RIA 相關的工作, 希望整合 Web 相關的服務與應用到 AP Side, 隱約記得之前參加過的 Microsoft 的 Workshop 中有介紹如何將 WCF, WinForm 2.0 跟 Web 整合在一起的方法. 如何將一個內含網頁服務的 Browser control 內嵌在 Host  (WinForm) 上, 並且讓 Host 有機會跟網頁中的 JavaScript 溝通, 進而使用 AJAX 的方式來更新 Browser control 顯示的內容, 如此就可以整合 AP 與網頁服務使兩者可以互動. 當然這都歸功於微軟在 Browser control 上提供了 window.externalHtmlDocument.InvokeScript 的方式讓 JavaScript 可以跟 Host 溝通 (這算後門嗎? :P)

然而只有和 HTML 上的 JavaScript 是不夠的, 我們的需求是需要跟 host 在 HTML 上的 Silverlight 溝通, 畢竟使用 Silverlight 或是 Flash 來做為 RIA 的應用更能得心應手. 其實Silverlight 本來就容易跟 JavaScript 溝通 (不然 Silverlight 怎麼跟 Flash 比), Silverlight 也提供了多種方式來達到這點, 詳細可以參考 MSDN HTML Bridge: Interaction Between HTML and Managed Code  或是一本簡體書 "Silverlight 2完美征程" 的 "第13章 浏览器交互".



有此方式我們就可以透由 JavaScript 做為 "膠水" 讓我們的 WinForm 或是 WPF App 與內嵌的 Silverlight App 溝通, MSDN 就有一篇 Article XBAP Hosting Silverlight Sample 用來實現這樣的用法, 而整體的概念大致如上圖.