タイトル

付録: 新SWFテンプレート

以前に公開した、CorelDRAWのFlashファイル(SWFファイル)書き出し用テンプレートですが、一部手直しをしたので、再公開します。

主な変更点は、

  • HTML書き出し後、出力先divボックス変更を容易にした
  • 64bit版Internet ExplorerでのFlash読み込みを阻止
  • object要素とembed要素による書き出しを、ブラウザに応じて分別

といったところです。

ソースコード

テンプレートのソースコードは、以下のとおりです。

一部の行で文字が隠れてしまうため、改行させています。完全なソースコードは、ダウンロードファイルを参照してください。


$TTFlash Only (Default)
$DS
FlashをJavaScriptで記述する(DOM対応ブラウザ専用)
divタグの中に配置 (C)黒住浩司
37~38行目の処理は、Flash非対応のInternet Explorer 64bit版用です。Flashの読み込みを行わないようにしています。
40~42行目の処理は、Internet Explorer以外のブラウザ用です。embed要素でFlashを読み込みます。
44行目の処理は、Internet Explorer 32bit版用です。object要素でFlashを読み込みます。
書き出されたHTMLから12~38行目(このファイルでは21~47行目)までを切り取り、SWFファイルと同名のjsファイルとして同じフォルダ内に保存します(例: SWFファイルが「flash.swf」の場合、「flash.js」として保存)。
Flashは、書き出されたHTMLファイルのdiv要素(id="loadswfファイル名")内に読み込まれます。
$DF
<html>
<head>
<title>$TI</title>
<style type="text/css">
body {
	background-color: $BG;
}
</style>
<script type="text/javascript"> //←このタグと次行のコメントは削除する
//↓ここから切り取る
function loadSwf$TI(ID) {
	var tag1 ='<object ';
	var tag2 = '<embed ';
	var tag3 = '>';
	var tag4 = '</object>';
	var tag5 = '</embed>';
	var cId = 'classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
	var cBase = 'codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" ';
	var ti = 'id="$TI" '; //parameter for ID
	var wi = 'width="$WI" '; //parameter for weight
	var he = 'height="$HE" '; //parameter for height
	var odt = 'data="$TI.swf" '; //parameter for data in object tag
	var po = '$PO'; //parameter for object tag
	var pe = '$PE' ; //parameter for embed tag
	var tp = 'type="application/x-shockwave-flash" ';
	var pgn = 'pluginspage="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" ';
	var valueObject = tag1 + cId + cBase + ti + wi + he + tag3 + po + tag4;
	var valueEmbed = tag2 + pe + wi + he + tp + pgn + tag3 + tag5;
	if ( navigator.platform.indexOf("Win64") !=-1 ) {
		return;
	}
	else if ( navigator.appName.charAt(0)=="M" ) {
		document.getElementById(ID).innerHTML = valueObject;
		return;
	}
	document.getElementById(ID).innerHTML = valueEmbed;
}
//↑ここまで切り取る
//このタグと前行のコメントは削除する→ </script>
<script type="text/javascript" src="$TI.js"></script>
</head>
<body onload="loadSwf$TI('loadswf$TI');">

<div id="loadswf$TI"></div>
<p>このHTMLファイルから12~38行目までを切り取り、SWFファイルと同名のjsファイルとして同じフォルダ内に保存します(例: SWFファイルが「flash.swf」の場合、「flash.js」として保存)。Flashは、このHTMLファイルのdiv要素(id="loadswfファイル名")内に読み込まれます。</p>
</body>
</html>
					

ダウンロードファイル名は、「new_swftemp.zip」です。ZIP形式で圧縮してあります。
この圧縮ファイル内に、「SWFScriptTemplate.htm」としてテンプレートファイル(HTML形式)が入っています(註1)。

解説

関数名

上記ソースコードのうち、初めの赤字部分で、このスクリプトの関数名を指定しています。この関数に、IDという引数を使うようにしています。引数IDには、Flashを読み込むdiv要素のid属性値が入ります。

書き出されるHTMLファイルには、このid属性値を入れたdiv要素が作成されますが、他のdiv要素等に読み込み先を変更する場合は、body要素に入れてあるonloadイベントハンドラの値で、引数部分を書き換えるだけで済みます。たとえば、「flash.swf」というファイル名でCorelDRAWから書き出すと、

<body onload="loadswfflash('loadswfflash');">

とイベントハンドラに記述され、同名id属性値がdiv要素にも入ります。これを、たとえば「box1」というid属性値のdiv要素に入れる場合は、イベントハンドラ内の引数だけを

<body onload="loadswfflash('box1');">

と書き換えます。

スクリプト本体のソースコードを変更する手間を、省いてみたわけです。

64bit版IEの処理

そして、二つ目の赤字部分が64bit版IEに関する部分です。64bit版はnavigator.platformWin64を返すので、これを使って、以降のFlashファイルを読み込む処理を行わずに、スクリプトを抜けるようにしています(註2)。

32bit版IEの処理

次の緑字部分で、navigator.appNameを使って文字列「M」を返すブラウザ、すなわちInternet Explorerを判別しています。すでに、64bit版は除外しているので、32bit版IEのみが選ばれます。そして、object要素による記述だけをこのブラウザに渡し、スクリプトを抜けます。

IE以外のブラウザ

Firefox等は、プラグインのFlash Playerを使ってFlashを表示しますが、この場合、embed要素でHTMLを記述しなければなりません。そこで、IEを除外した上で最後に残ったブラウザに対し、embed要素による記述だけを渡すようにしています。上記ソースコードの、青字部分です。

その他

その他の修正としては、codebasepluginspageに記述されるURIアドレスを、新しいものに書き換えています。これらのアドレスは、CorelDRAW X4に入っている、デフォルトのSWFテンプレートを参考にしました。

また、テンプレートファイルや出力されるHTMLファイルにも、処理内容や使用方法の説明を入れておきました。

なお、従来どおりこのスクリプトは、DOMに対応したブラウザのみで有効です。現在、一般的なIE6、7、そしてFirefoxやOperaの最新版はDOMに対応しています。


自動リスト

記事内のナビゲーション
記事中の各見出しは、クリックすると「目次」(Contents)に戻ることができます。「目次」の各項目は、クリックすると記事内の見出しに移動できます。
目次とそのリンクは、JavaScriptによって自動的に生成しているため、JavaScriptを無効にしている場合、機能しなくなります。

脚注
註1
当サイトの利用規則を承諾された方にのみ、ダウンロードを許可します。ファイルの再配布は、お断りします。また、これらのスクリプトは各自の責任でご利用ください。これらのスクリプトによって発生したいかなる損害に対しても、当サイトおよび制作者(黒住浩司)は責任を負いません。
註2
Flashを表示するFlash Playerは、32bit版しかAdobe Systems社から提供されていません。64bit版Internet Explorerでは、この32bit版Playerには対応していないため、Flashファイルを表示できません。なおかつ、FlashファイルのあるWebページを64bit版IEで開くと、毎回、アドオンのインストールを要求されます。この煩雑さを避けるため、64bit版IEにはFlashファイルを読み込まないようにしてみました。
ただし、このスクリプトでは、代替の画像等を表示するといった処理まではしていません。単に、何も表示されないようにするだけです。