2014年11月7日金曜日
SilverlightからJavascriptの使い方
Silverlight⇔Javascriptの双方向呼び出し方法について調べたので情報公開します。
WPFでも使えそう。
まず、C#側でのJavaScript関数の呼び出しです!
●マネージコード(C#)でクラスを作成する
呼び出される関数にはScriptableMember属性が必要となります。
【ScriptableClass.cs】
public class ScriptableClass
{
[ScriptableMember]
public void ShowAlertPopup(string message)
{
MessageBox.Show(message, "Message From JavaScript", MessageBoxButton.OK);
}
}
●マネージコード(C#クラス)の登録
スクリプト可能なマネージ コード オブジェクトを作成して、スクリプトから呼び出されるようにします。
例えば、App.csのApplication_Startup関数内で、次のように記載します。
【App.xaml.cs 】
private void Application_Startup(object sender, StartupEventArgs e)
{
this.RootVisual = new MainPage();
HtmlPage.RegisterScriptableObject("ScriptableClass", new ScriptableClass());
}
● MainPageにボタンの追加
ボタンクリック時の実行される”DisplayAlertMessage”がJavaScriptの関数になります。
二番目の引数が ”DisplayAlertMessage”へのデータ私になります。
【MainPage.xaml 】
<Button x:Name="CallingButton" Content="Call JavaScript Method From Silverlight" Height="25" Click="CallingButton_Click"/>
【MainPage.xaml.cs】
private void CallingButton_Click(object sender, RoutedEventArgs e)
{
System.Windows.Browser.HtmlPage.Window.Invoke ("DisplayAlertMessage", "From Silverlight");
}
● HTMLにJavaScriptの追加
<script type="text/javascript">
function DisplayAlertMessage(param1)
{
alert("your are invoke method of javascript \n" + param1);
}
</script>
今度は、JavaScriptからC#での関数の呼び出しです!
● HTMLにボタン追加します
CallSilverlightがJavaScriptの関数で、この関数内でC#の関数を実行します
<div>
<div style="width: 250px; background: lightblue; font-weight: bold;height:30px">
HTML Part
</div>
<div>
<input type="button" value="Calling Silverlight Method From Javascript" onclick="CallSilverlight();" />
</div>
</div>
● ロード時の処理を追加します
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="80%">
<param name="source" value="ClientBin/Silverlight2JSViseVersa.xap" />
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<param name="onLoad" value="pluginLoaded" />
<a href=http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0 style="text-decoration: none">
<img src=http://go.microsoft.com/fwlink/?LinkId=161376 alt="Get Microsoft Silverlight" style="border-style: none" />
</a>
</object>
●JavaScript関数を作成します。
HML内に記載します。
ScriptableClassがApp.csで登録した名前です。
ShowAlertPopupが一番最初に記載したC#での関数です。
<script type="text/javascript">
var slCtl = null;
function pluginLoaded(sender, args) {
slCtl = sender.getHost();
}
function CallSilverlight() {
slCtl.Content.ScriptableClass.ShowAlertPopup ("Testing for Calling Silverlight Method\n From Javascript");
}
</script>
参考用URLを以下に記載します。
http://msdn.microsoft.com/ja-jp/library/cc903928(v=vs.95).aspx
http://msdn.microsoft.com/ja-jp/library/cc838145(v=vs.95).aspx
http://msdn.microsoft.com/ja-jp/library/cc645076(v=vs.95).aspx
http://msdn.microsoft.com/ja-jp/library/cc645085(v=vs.95).aspx
http://gihyo.jp/dev/serial/01/silverlight/0002
http://techblog.yahoo.co.jp/tips/silverlight/
http://www.codeproject.com/Articles/293515/Calling-Silverlight-Method-from-Javascript-and-Jav
http://www.atmarkit.co.jp/fdotnet/dotnettips/902slobjcallfromjs/slobjcallfromjs.html
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿