« 「JavaScriptでSilverlight」をはじめてみました | トップページ | マウスの動作によって色を変える~JavaScriptで動的に変化させる »

2008/02/01

"Silverlightの領域をdocument.bodyからdiv内に閉じ込める"の最後のサンプルがFirefoxで動かないのを修正する

Silverlightの領域をdocument.bodyからdiv内に閉じ込める では最終的に作成したサンプルは これ です。これ、IE7では動きますが、Firefoxでは動きません。最初、原因がわからなかったのですが、何とかわかりました。まず、先の例では、index.html中に次のような指定を追加しました。

<div id=" silverlightBlock "></div>

そして、createSilverlight.jsのcreateMySilverlightPlugin()関数定義で、作成場所として silverlightBlock を指定しました。次のように、です。

function createMySilverlightPlugin() {
 Silverlight.createObject("myxaml.xaml", silverlightBlock ,"firstsample",{width:"300",height:"300",background:"lavender",version:"1.0"},{onError:null,onLoad:null});
}

これで、id名がsilverlightBlockであるdivブロックがSilverlight領域の作成場所になると書きましたが、これが通用するのはIE7だけだったみたいです。FirefoxはIE7のように融通が利かないみたいで、id名だけでは場所を認識してくれません。具体的には、次のようにJavaScriptのgetElementById()メソッドを使って、id名のオブジェクトへの参照をキチンと変数に格納し、その変数をcreateMySilverlightPlugin()の関数定義中で指定する必要があります。

var 変数 = document.getElementById("silverlightBlock");

というわけで、 Firefoxで動かなかったサンプル は、全体を少し修正する必要があります。修正後の4つのファイルは次のとおりです。

【index.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" xml:lang="ja">
 <head>
  <title>はじめてのSilverlight</title>
  <script type="text/javascript" src="Silverlight.js"></script>
  <script type="text/javascript" src="createSilverlight.js"></script>
 </head>
 <body>
 <h2>JavaScriptでSilverlight</h2>
 <div id="silverlightBlock"></div>
 <script type="text/javascript">
  var parentElement = document.getElementById("silverlightBlock");
  createMySilverlightPlugin();

 </script>
 </body>
</html>

【createSilverlight.js】

function createMySilverlightPlugin() {
 Silverlight.createObject("myxaml.xaml", parenetElement ,"firstsample",{width:"300",height:"300",background:"lavender",version:"1.0"},{onError:null,onLoad:null});
}

【Silverlight.js】(そのまま使うので内容省略)

【myxaml.xaml】

<Canvas
   xmlns="http://schemas.microsoft.com/client/2007"   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Rectangle Height="100" Width="100"
 Canvas.Left="100" Canvas.Top="100"
 Stroke="crimson" StrokeThickness="10" Fill="navy" />
</Canvas>

上の4つのファイルを同じフォルダに置き、index.htmlを読み込んだ結果が↓です。今度は、IE7でもFirefoxでも動くはずです。

http://www.makoto3.net/xaml/silverlight0025/index.html

Firefoxで動かなかったサンプル では、<body>のonloadでcreateMySilverlightPlugin()関数を呼び出していましたが、こちらの方法ではそれをやめて<body>~</body>内にスクリプトを入れています。

HTMLファイルは上から下にレンダリングされていきますから、id名がsilverlightBlockの<div>が読み込まれたあと、次のスクリプトを実行し、このdivオブジェクトへの参照を変数parentElementに格納しています。

 var parentElement = document.getElementById("silverlightBlock");

そして、そのあとでcreateMySilverlightPlugin()関数を実行しています。

createSilverlight.jsに書いてあるcreateMySilverlightPlugin()関数の定義では、Silverlightの作成場所として変数のparentElementを指定しているので、<div id="silverlightBlock">~</div>内にSilverlightプラグインが作成されることになります。

というわけで、何とか、IE7でもFirefoxでも動くSilverlightの書き方にたどり着けました。

JavaScriptでSilverlight 目次


このページは xfy Blog Editor  を利用して作成されました。

« 「JavaScriptでSilverlight」をはじめてみました | トップページ | マウスの動作によって色を変える~JavaScriptで動的に変化させる »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/39246/17913540

この記事へのトラックバック一覧です: "Silverlightの領域をdocument.bodyからdiv内に閉じ込める"の最後のサンプルがFirefoxで動かないのを修正する:

« 「JavaScriptでSilverlight」をはじめてみました | トップページ | マウスの動作によって色を変える~JavaScriptで動的に変化させる »

2009年7月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

最近のトラックバック