.NET TIPS

[Silverlight 2]Silverlightプラグイン・ロード時にJavaScriptコードを実行するには?[C#、VB]

デジタルアドバンテージ 一色 政彦
2009/07/09

 SilverlightアプリケーションをHTMLページの一部(=コントロール)として埋め込むケースでは、Silverlightコントロール(=Silverlightプラグイン)がロードされた直後に、HTMLページの一部を更新するなどの処理を行いたいことがある。そのような場合には、SilverlightコントロールのLoadedイベントを、HTMLコード(のJavaScriptコード)側でハンドルすればよい。

 次のSilverlightアプリケーションでは、実際にLoadedイベントをハンドルして、Silverlightコントロール・ロード直後に、HTMLコンテンツとして記述された「Silverlightコントロールがロードされていません」というメッセージを、「Silverlightコントロールがロードされました」に書き換える。

Silverlightコントロールがロードされていません
Silverlightコントロールのロード直後にメッセージを書き換えるサンプル

■HTMLコードでLoadedイベントをハンドルする場合

 Silverlightコントロールがロードされたのを、HTMLコード(のJavaScriptコード)側でハンドルするには、まずはHTMLコード内に埋め込んでいるSilverlightコントロールの<object>タグ内に「<param name="onload" value="onSilverlightLoaded" />」(下記のコードの太字部分)を追記する。

<div id="silverlightControlHost">
  <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
    <param name="source" value="ClientBin/SilverlightApplication1.xap"/>
    <param name="onload" value="onSilverlightLoaded" />
    <param name="onerror" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="2.0.31005.0" />
    <param name="autoUpgrade" value="true" />
    <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
       <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Microsoft Silverlight を取得" style="border-style: none"/>
    </a>
  </object>
  <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
</div>
Silverlightプラグインのロード・イベントとJavaScript関数を関連付けるHTMLコード

■ASP.NETコードでLoadedイベントをハンドルする場合

 ASP.NET(.aspxファイル)では、<object>タグのほかに、Silverlightコントロール(<asp:Silverlight>タグ)が使える。この場合は、<asp:Silverlight>タグ内に「OnPluginLoaded="onSilverlightLoaded"」(下記のコードの太字部分)を追記すればよい。

 ちなみにOnPluginLoaded属性のほかに、loaded属性もあるが、こちらはサーバ・コントロールのロード時にサーバサイドで処理を行うためのものだ。一方、OnPluginLoaded属性は、クライアント側のJavaScriptコードで処理を行うためのもの。

<asp:Silverlight ID="Xaml1" runat="server"
  Source="~/ClientBin/SilverlightApplication1.xap"
  MinimumVersion="2.0.31005.0"
  Width="100%" Height="100%"
  OnPluginLoaded="onSilverlightLoaded" />
Silverlightコントロールのロード・イベントとJavaScript関数を関連付けるASP.NETコード

■JavaScriptコードによるLoadedイベント・ハンドリング

 上記のいずれの実装でも、「onSilverlightLoaded」という名前のJavaScriptコードの関数が呼び出される。従って、次の例のようにonSilverlightLoaded関数内に目的の処理を記述すればよい。

<script language="javascript">
  function onSilverlightLoaded(sender, args) {
    document.getElementById("sl_loaded").innerHTML =
      "Silverlightコントロールがロードされました";
  }
</script>
Silverlightコントロールのロード時に実行されるJavaScriptコードの関数

 このコード例では、IDが「sl_loaded」の要素のHTMLコードを書き換えている。その要素は、例えば次のように記述すればよい。

<div id="sl_loaded">
Silverlightコントロールがロードされていません
</div>
Silverlightコントロールのロード時に実行されるJavaScriptコードの関数

 ロード時に呼び出される関数のパラメータ(仮引数)には、senderとargsがある。

 senderはLoadedイベントを発生させたSilverlightオブジェクトである。このオブジェクトのgetHost関数(パラメータなし)を呼び出せば、Silverlightコントロールのオブジェクト、つまりSilverlightHostクラス(System.Windows.Interop名前空間)のオブジェクトを取得できるので、そこからSilverlightコントロールの情報を取得/設定したり、オブジェクトを操作したりできる。

 一方、argsにはイベントの引数が渡されるが、Loadedイベントではnullのため(ちなみに、ほとんどのSilverlightイベントでargsはnull)、argsを省略してもよい。なお、senderを使用しない場合は、これも省略してよい。End of Article

カテゴリ:Silverlight 2 処理対象:ブラウザ
使用ライブラリ:
SilverlightHostクラス(System.Windows.Interop名前空間)

この記事と関連性の高い別の.NET TIPS
[Silverlight 2]JavaScriptコードからSilverlightのオブジェクトを利用するには?
[Silverlight 2]HTML要素クリック時にSilverlightのメソッドを実行するには?
[Silverlight 2]マウス・オーバー時にSilverlightコントロールを大きく表示するには?
[Silverlight 2]HTMLページ内のJavaScriptコードを実行するには?
[Silverlight 2]文字列として作成したJavaScriptコードを実行するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間