このページの本文へ

自分だけのYUREXアプリに挑戦!開発レシピを大公開 (2/6)

2010年02月23日 14時00分更新

文●本間哲平/面白法人カヤック

  • この記事をはてなブックマークに追加
本文印刷

ローカルメッセージング機能でSilverlightとYUREXをつなぐ

 前回の記事で、YUREXをWindowsアプリケーションから扱う方法を説明しました。今回は、Windowsアプリがブラウザー上のうましかアプリに対して、Silverlightのローカルメッセージング機能でメッセージを送ってやればよさそうです。方法は、Silverlightのドキュメントでいくつか紹介されています。


http://msdn.microsoft.com/en-us/library/dd550717(VS.95).aspx


 その中で、一番簡単な方法であるブラウザーコントロールへの埋め込みを使います。.NET Framework version 2.0から用意された「WebBrowser」というコントロールを使うと、Windowsアプリにブラウザー機能を簡単に組み込めます。Windowsアプリに埋め込んだブラウザー上で、Silverlightを呼び出す適当なHTMLを表示すればよさそうです。

 ここまでの構成は以下のようになります。


 ベースになるHTMLはこんな感じでいいですね。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <script type="text/javascript">
        var slFunctions = null;
        function onSilverlightLoad(sender, args) {
            var slPlugin = sender.getHost();
            slFunctions = slPlugin.Content.MyScriptableObject;
        }
        function notify() { try { slFunctions.Notify(); } catch (e) { ; } }
    </script>
</head>
<body>
    <div id="silverlightControlHost">
        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2">
          <param name="source" value="SL_MessagingHost.xap"/>
          <param name="onLoad" value="onSilverlightLoad" />
          <param name="minRuntimeVersion" value="3.0.40818.0" />
          <param name="autoUpgrade" value="true" />
        </object></div>
</body>
</html>


 WebBrowserコントロールの中のSilverlightオブジェクトと、ホストのアプリケーションとの通信方法が必要ですね。JavaScriptを橋渡しに、2段階の処理を考えます。ホストとWebBrowserの中のJavaScriptの通信と、JavaScriptからSilverlightへの通信です。Silverlight側のオブジェクトに呼び出し可能なクラスを作成して、実装します。


using SL_MessagingHost;
using System;
using System.Windows.Browser;
using System.Windows.Messaging;
namespace SL_MessagingHost
{
    public class MyScriptableObject
    {
        [ScriptableMember()]
        public void Notify()
        {
            try
            {
                Guid id = App.ChildWindows[0];
                var MessageSender = new LocalMessageSender(App.AppName + "/" + id.ToString(), LocalMessageSender.Global);
                MessageSender.SendAsync("notify");
            }
            catch (Exception) { ;}
        }
    }
}


 このクラスをSilverlightアプリケーション起動時に


HtmlPage.RegisterScriptableObject("MyScriptableObject", new MyScriptableObject());


として実行すれば、JavaScriptから呼び出し可能なオブジェクトを登録できます。

 ホスト側からオンラインのSilverlightへの通信は、今回の場合、一方通行で事足ります。JavaScriptの呼び出しはホスト側プログラムでWebBrowserコントロールに対して、


webBrowser1.Url = new Uri("javascript:notify();");


として呼び出せばいいでしょう。


■Amazon.co.jpで購入
  • YUREX面白法人 カヤック

この連載の記事

一覧へ

この記事の編集者は以下の記事をオススメしています