locked
Silverlightの内部にHTMLを表示する方法について RRS feed

  • 質問

  • たとえばSilverlightで作成した経営指標分析のアプリに、他のサーバーで稼働しているWebシステムの表をそのまま表示させたいような場合、Silverlightには内部にHTMLを描画するためのコントロールが存在しないようですので、JavaScriptからSilverlightの内部にHTMLの要素(div, iframeなど)を重ね合わせるような処理を行えば実現できるのかなと思いました。ですが、どのように実装すれば良いか見当が付きません。どこかにそのようなサンプルが無いものでしょうか。もしくは、ヒントだけでも教えて頂けると助かります。Silverlight2で開発を行っております。よろしくお願いいたします。
    2009年10月8日 6:40

回答

  • サンプルはSilverlightをホストしているHTMLから制御しているのではなく、SilverlightからHTMLを操作しています。
    現在(Silverlight3)ではSilverlight内部でHTMLを持つ機能は提供されていません。


    ★良い回答には回答済みマークを付けよう! kazuto Blog : http://blogs.wankuma.com/kzt/
    • 回答としてマーク tak_akin 2009年12月4日 2:07
    2009年10月29日 8:47

すべての返信

  • Silverlight内にHTMLを疑似的に表示するようにするには、基本的にhtmlでposition="absolute"を使用してSilverlightコントロールをホストしているdivタグの上に表示する要素を重ねるようにします。
    ただ重ねるだけではSilverlight内にhtmlが表示されませんので、Siverlightコントロールのobjectタグのparamタグのname属性に"Windowless"を指定し、value属性を"true"に設定します。
    このようにすることで疑似的にSilverlightコントロールにHTMLを表示しているように見せる事が出来ます。

    すごく簡単な例ですがコードを載せておきます。


    <body>
        <form id="form1" runat="server" style="height:100%">
        <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="onError" value="onSilverlightError" />
              <param name="background" value="white" />
              <param name="minRuntimeVersion" value="3.0.40818.0" />
              <param name="autoUpgrade" value="true" />
              <!-- これを追加 -->
              <param name="windowless" value="true" />
              <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40818.0" style="text-decoration:none">
                   <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Microsoft Silverlight を入手" style="border-style:none"/>
              </a>
            </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
            <!-- Silverlightに重ねて表示する要素 -->
            <div style="position:absolute; top:100px; left:100px; background:blue; width:100px; height:100px" />
        </form>
    </body>

    kazuto Blog : http://blogs.wankuma.com/kzt/
    2009年10月9日 7:37
  • 返事が遅くなり申し訳ありません。
    回答ありがとうございました。サンプルコードの提供も大変ありがたいです。

    このサンプルコードはまずおおもととなるHTMLがあり、その中でSilverlightがホストされ、そのSilverlight部分に
    別のURLのHTMLを重ね合わせて表示するサンプルとお見受けしました。

    こちらがやりたいと思っている事は少し違いまして、Silverlightアプリの動作に応じて表示したいHTMLが変わったり、
    表示・非表示を切り替えたりしたいと思っていますので、XAMLもしくはC#のコードの中で制御できないか
    と思っています。

    説明が不足しておりまして申し訳ありません。

    ただ、このサンプルが流用可能であり、こちらが見当違いをしていたら申し訳ありません。

    2009年10月15日 4:39
  • 前回書いたサンプルはSilverlightをホストしているHTMLの別要素(サンプルではdivタグ)を重ねて表示するサンプルです。
    よって現在レンダリングされているHTMLとは別のURLのHTMLを表示している訳ではありません。

    >Silverlightアプリの動作に応じて表示したいHTMLが変わったり、表示・非表示を切り替えたりしたいと思っていますので

    詳細は良く分かりませんが、C#でブラウザを制御する事は可能です。
    Silverlightアプリの動作によって動的にSilverlightアプリ内に重ねるHTMLを変更するロジックを実装すれば実現できると思います。

    HTMLブリッジ

    上記サイトで分かり易く説明されていますので、是非一読される事をお勧めします。

    tak_akinさんがSilverlightを通じてどのような実装をしたいのかつかめなかったので、的を外した回答になっていましたら申し訳御座いません。


    ★良い回答には回答済みマークを付けよう! kazuto Blog : http://blogs.wankuma.com/kzt/
    2009年10月15日 5:11
  • 何度もお付き合い頂き、本当にありがとうございます。頂いた情報を検討してみます。
    1点だけ最後に確認させて下さい。
    頂いたサンプルはSilverlightをホストしているHTMLから制御する方法ですが、
    そうではなく、Silverlightの内部でHTMLに例えるとIFrameのような機能を持つ事は出来ない
    (そのような機能は用意されていない)という認識で間違いないでしょうか。

    2009年10月29日 7:40
  • サンプルはSilverlightをホストしているHTMLから制御しているのではなく、SilverlightからHTMLを操作しています。
    現在(Silverlight3)ではSilverlight内部でHTMLを持つ機能は提供されていません。


    ★良い回答には回答済みマークを付けよう! kazuto Blog : http://blogs.wankuma.com/kzt/
    • 回答としてマーク tak_akin 2009年12月4日 2:07
    2009年10月29日 8:47