付録: 新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.platform
でWin64
を返すので、これを使って、以降のFlashファイルを読み込む処理を行わずに、スクリプトを抜けるようにしています(註2)。
32bit版IEの処理
次の緑字部分で、navigator.appName
を使って文字列「M
」を返すブラウザ、すなわちInternet
Explorerを判別しています。すでに、64bit版は除外しているので、32bit版IEのみが選ばれます。そして、object要素による記述だけをこのブラウザに渡し、スクリプトを抜けます。
IE以外のブラウザ
Firefox等は、プラグインのFlash Playerを使ってFlashを表示しますが、この場合、embed要素でHTMLを記述しなければなりません。そこで、IEを除外した上で最後に残ったブラウザに対し、embed要素による記述だけを渡すようにしています。上記ソースコードの、青字部分です。
その他
その他の修正としては、codebase
やpluginspage
に記述されるURIアドレスを、新しいものに書き換えています。これらのアドレスは、CorelDRAW
X4に入っている、デフォルトのSWFテンプレートを参考にしました。
また、テンプレートファイルや出力されるHTMLファイルにも、処理内容や使用方法の説明を入れておきました。
なお、従来どおりこのスクリプトは、DOMに対応したブラウザのみで有効です。現在、一般的なIE6、7、そしてFirefoxやOperaの最新版はDOMに対応しています。