mikeo_410


 WEBのページを作る

  XAMLマークアップ、あるいはXAMLスクリプトをウエブ・ブラウザで表示する方法を考えて見ます。

XAMLを利用する目的

  1. 数式を記述したい
  2. 図形を記述したい
  3. 図形が動くようにしたい

実現方法

 方法

 説明

 備考

Silverlightアプリケーション
複数ページ

 複数ページのSilverlightアプリ
ケーションが作成できる

一括してダウンロードされる 
 Silverlightアプリケーション
 単一ページ
 1つ1つのページをパッケージ
(XAP)にする

手間だが不要なダウンロードない
ただし、カットアンドペーストなど、操作
性がHTMLのページと違いすぎる。

Silverlightアプリケーション
HTMLに埋め込む 
 普通のSilverlightの使い方
 XAMLファイルをリンク  ブラウザはXAMLを開ける Silverlightの制約なし
XAMLファイルをHTMLの
IFRAMEでホストする
HTMLページ中のフレームに
表示
XAML記述をHTMLに
埋め込む
HTML中にscriptタグでXAML
記述を埋め込む
  1. Silverlightアプリケーション複数ページ
    サンプルは、「複数ページのSilverlightアプリケーション
  2. Silverlightアプリケーション単一ページ
    Visual Studioで普通にSilverlightアプリケーションを作成すると、.xap と、それをホストするHTMLファイルが作られる。
    そして、Silverlightアプリケーションがページとしてブラウザに表示されるが、これは、HTMLファイルに他の要素が記述されていないためで、Silverlightをページにするのと、パーツにするのには区別はない。
    記述方法は、Visual Studio が作る TestPage.htm を見るとわかる。
    Silverlightアプリケーションについては、このページの先頭の目次から、「プログラミング Tips」「Silverlight」以下を参照。
  3. SilverlightアプリケーションHTMLに埋め込む
    Silverlightアプリケーション単一ページに同じ
  4. XAMLファイルをリンク
    通常、HTMLファイル名を記述する箇所に、XAMLファイル名を書いてリンクとして開くことができる。
    これは、ブラウザがXAMLファイルを開ける場合で、ブラウザや設定によっては開けない。
    下記は、XAMLファイルを直接リンクしてある。
    xps_math_test.xaml
    この場合のXAMLの処理は、Silverlightのランタイムでなく、.Net Frameworkが使われる。
  5. XAMLファイルをHTMLのIFRAMEでホストする
    ブラウザはXAMLを開けるので、IFRAMEでも開ける。
    HTMLページの一部として使える以外は、基本的にXAMLファイルを直接リンクした場合と区別はない。
    IFRAMEタグによるXAMLファイルの参照
  6. XAML記述をHTMLに埋め込む
    この方法は、HTMLファイル中にスクリプトとして、XAMLを記述しておき、objectタグで実行するものです。
    objectタグの記述は、Silverlightアプリケーションをホストする場合と同じです。
    したがって、処理はSilverlightのランタイムに依存し、XAMLの機能もSilverlightの制限によります。
    HTMLファイルにXAMLを記述
    Silverlightアプリケーションの起動に使われるJavaScriptから呼び出す、Silverlight.createObject() かSilverlight.createObjectEx() も使用できます。

XAMLの機能制限

  ブラウザで表示する場合のXAMLには3段階の制限があるようです。

  1. Loose XAML
    ブラウザで直接開く場合と、IFRAMEタグで開く場合はフルセットで使用できるようです。Viewport3Dも可能です。
  2. Silverlight
    Silverlightアプリケーションで利用する場合は、Silverlight用のサブセットになります。
  3. オブジェクトタグで開くXAMLスクリプト
    まだ、良くわからないが開けないものがあります。(エラーになるわけではなく、単に全体が表示されなくなる。)

     項目

     原因

     {Binding ... }  
     DataTrigger  Silverlightで未サポート
     EventTrigger SourceName  
     Button  
     CheckBox  
     TextBlock  Textの内容は表示されるが、入力にはならない

createObject() と object タグ

createObject()

  Silverlight.js にある createObject() 、createObjectEx() は、div タグの child に object を生成するもののようです。
  source には、URL か #id の形式でファイル内のXAMLスクリプトが指定できます。

  1. <div id="div_sl01"></div>
  2.  <script type="text/javascript">
  3.      Silverlight.createObjectEx({
  4.          source: "#xamlScript1",
  5.          parentElement: document.getElementById("div_sl01"),
  6.          id: "sl01",
  7.          properties: { width: '100%', height: '100%', version: '1.1' },
  8.          events: {}
  9.      });
  10.  </script>

  これを 開いて FireFox の FireBug で見ると以下のようになっています。

  1. <div id="div1">
  2.     <object height="100%" width="100%" id="sl01" data="data:application/x-silverlight,"
  3.         type="application/x-silverlight">
  4.         <param value="#xamlScript1" name="source">
  5.     </object>
  6. </div>

XAMLをホストする object タグ

  前述のスクリプトが作る簡単な object タグで表示には十分なようですがもう少し。

Visual Studio が Silverlightアプリケーション用に生成するHTML

  1. <form id="form1" runat="server" style="height:100%">
  2. <div id="silverlightControlHost">
  3.     <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
  4.       <param name="source" value="ClientBin/SilverlightApplication.xap"/>
  5.       <param name="onError" value="onSilverlightError" />
  6.       <param name="background" value="white" />
  7.       <param name="minRuntimeVersion" value="4.0.50401.0" />
  8.       <param name="autoUpgrade" value="true" />
  9.       <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
  10.           <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
  11.       </a>
  12.     </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
  13. </form>

  source パラメータを書き換えて、XAMLを参照して見ました。form と iframe の意味はわかりません。削除しても表示に差がないようです。
  この場合、始めから object タグで書かれていますが、Silverlight.js もインポートされています。

HTMLDo で object タグを書くと

  編集に使っている エディタ(HTMLDo)で、ソース表示にして object タグを書いて見ました。理屈はわかりませんが、ブラウザコンポーネントが、これを展開してしまします。
  この展開された記述では表示が行われません。
  type="application/x-silverlight" を設定すると、設定可能なparamを列挙しているようです。data="data:application/x-silverlight,"は、記述すると以降が崩れて記述不能です。
  どのパラメータが不適切なのか調べて見ました。

  1. <object type="application/x-silverlight">
  2.     <param name="_cx" value="5080">
  3.     <param name="_cy" value="5080">
  4.     <param name="Background" value="">
  5.     <param name="EnableFramerateCounter" value="0">
  6.     <param name="EnableCacheVisualization" value="0">
  7.     <param name="EnableRedrawRegions" value="0">
  8.     <param name="Source" value="">
  9.     <param name="MaxFramerate" value="60">
  10.     <param name="Windowless" value="0">
  11.     <param name="OnError" value="">
  12.     <param name="OnFullScreenChanged" value="">
  13.     <param name="OnResize" value="">
  14.     <param name="OnZoom" value="">
  15.     <param name="OnLoad" value="">
  16.     <param name="InitParams" value="">
  17.     <param name="Culture" value="">
  18.     <param name="UICulture" value="">
  19.     <param name="EnableHtmlAccess" value="-1">
  20.     <param name="AllowHtmlPopupWindow" value="-1">
  21.     <param name="SplashScreenSource" value="">
  22.     <param name="OnSourceDownloadComplete" value="">
  23.     <param name="OnSourceDownloadProgressChanged" value="">
  24.     <param name="MinRuntimeVersion" value="">
  25.     <param name="AutoUpgrade" value="">
  26.     <param name="EnableGPUAcceleration" value="0">
  27.     <param name="EnableAutoZoom" value="0">
  28.     <param name="EnableNavigation" value="">
  29. </object>

  以下は、有効な値である必要があるようです。

  1. <param name="Source" value="#xamlScript1">
  2. <param name="Background" value="#f0f0f0">
  3. <param name="MinRuntimeVersion" value="4.0.50401.0">


mikeo_410@hotmail.com