ローカルメッセージング機能で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面白法人 カヤック