2006年7月アーカイブ

今更ながら使う機会がありそうなので使い方をまとめてみる。


Flash / JavaScript Integration Kit

・Download the latest release of the Flash / JavaScript Integration Kit.
から最新のライブラリをダウンロード。

FlashJavascriptGateway.zipを解凍


・Flash側の設定:
1.source/flash/actionscriptのcomフォルダをFlashのクラスパスに追加するか、
Kitを使用するflaファイルと同じディレクトリにcomフォルダごとコピー。

2.Kitを使用するflaファイルにcomフォルダ内のJavaScriptProxyクラスのインポートと、インスタンスを生成するActionScriptを記述。

import com.macromedia.javascript.JavaScriptProxy;
var proxy:JavaScriptProxy = new JavaScriptProxy(_root.lcId, this);


・HTML側の設定:
1.installationフォルダのJavaScriptFlashGateway.js、JavaScriptFlashGateway.swfをwebディレクトリにコピー

2.HTMLにFlashProxyのインスタンスを生成するJavaScriptを記述。

<script type="text/javascript" src="上記でコピーしたJavaScriptFlashGateway.jsまでのパス"></script>
<script language="javascript">
var lcId = new Date().getTime();
var flashProxy = new FlashProxy(lcId, "上記でコピーしたJavaScriptFlashGateway.swfまでのパス");
</script>

3.swfを表示するJavaScriptを記述。

<script type="text/javascript">
var tag = new FlashTag("Kitを使用するswfまでのパス", Kitを使用するswfの縦幅, Kitを使用するswfの横幅); // last two arguments are height and width
tag.setFlashvars('lcId='+lcId);
tag.write(document);
</script>

例.

<!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="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>Sample</title>
<script type="text/javascript" src="JavaScriptFlashGateway.js"></script>
<script language="javascript">
var lcId = new Date().getTime();
var flashProxy = new FlashProxy(lcId, "JavaScriptFlashGateway.swf");
</script>
</head>
<body bgcolor="#ffffff">
<!--url's used in the movie-->
<!--text used in the movie-->
<script type="text/javascript">
var tag = new FlashTag("Sample.swf", 550, 400);
tag.setFlashvars('lcId='+lcId);
tag.write(document);
</script>
</body>
</html>

・FlashからJavaScriptの関数呼び出し:

proxy.call( "JavaScript関数名", 引数1,引数2... );

*呼び出した関数の返り値を取得する場合は、呼び出されるJavaScript関数内でFlash内の関数を呼んで値を返す必要がある。
例.
function callFromAs(){
flashProxy.call("ActionScript関数名", Flashに返す値1,Flashに返す値2... );
}

・JavaScriptからFlashの関数呼び出し:

flashProxy.call("ActionScript関数名", 引数1,引数2... );

*呼び出した関数の返り値を取得する場合は、呼び出されるActionScript関数内でJavaScript内の関数を呼んで値を返す必要がある。
例.
function callFromJavaScript() {
proxy.call( "JavaScript関数名", JavaScriptに返す値1,JavaScriptに返す値2... );
}


*「"com.macromedia.javascript.JavaScriptProxy" がロードされませんでした。」のエラーが出る問題:
Windows 版の Flash は asファイルが BOM つきの UTF-8 で保存されてないとダメらしい。
JavaScriptProxy.as と JavaScriptSerializer.as を Flash で一度開いてから保存しなおすことによって解決。


*日本語が使えない問題:
こちらのblogで詳しい原因と解決策が紹介されています。
ARK-WEB Blog:JavaScriptからFlashの関数を呼ぶ - Flash Java Script Integration Kit

・修正方法:
JavaScriptFlashGateway.jsの250行目付近の以下部分を修正。
修正前.

switch(typeof(args[i]))
{
case 'undefined':
qs += 't'+(i)+'=undf';
break;
case 'string':
qs += 't'+(i)+'=str&d'+(i)+'='+escape(args[i]);
break;
case 'number':
qs += 't'+(i)+'=num&d'+(i)+'='+escape(args[i]);
break;
case 'boolean':
qs += 't'+(i)+'=bool&d'+(i)+'='+escape(args[i]);
break;

修正後.
switch(typeof(args[i]))
{
case 'undefined':
qs += 't'+(i)+'=undf';
break;
case 'string':
qs += 't'+(i)+'=str&d'+(i)+'='+encodeURI(args[i]);
break;
case 'number':
qs += 't'+(i)+'=num&d'+(i)+'='+escape(args[i]);
break;
case 'boolean':
qs += 't'+(i)+'=bool&d'+(i)+'='+escape(args[i]);
break;


TITLe 2006年9月号

「こんな会社で働きたい!」という表紙で即買い。

そういえば昨日、タモリ倶楽部でGoogle日本支社を訪問していた。
ゆったりオフィス。やっぱ環境は超重要。

広告 2006年9月号

今月はWEB特集だったので買ってみた。

「WEB進化論」の著者、梅田望夫氏のインタビュー、中村勇吾氏と永井一史氏の対談等、読み応えあり。


Mac版Flex Builer 2.0のスクリーンショットが掲載されています。

kuwamoto.org: Yes, Virginia, there is a Mac build

ところで、Mac版の日本語版ってリリースされるのだろうか?

Document classを試してみた。
とりあえずコンストラクタだけの簡単なクラスを作ってプロパティインスペクタにクラス名を指定してプレビュー。
"Sprite から継承する必要があります。"とエラー。

flash.display.Spriteを継承したらOK。
もちろんSpriteのサブクラスのflash.display.MovieClipを継承してもOK。

試しにタイムラインに

trace(this instanceof Sprite);

と書いてみたら、警告でたけど true が返ってきた。

ということでDocument classはSprite型。
この解釈で良いのかな。

昨日ActionScript 3 デビューセミナーに参加。

FlashOOPのマルコス氏が高負荷のコンテンツをAS2とAS3で作った場合の比較を紹介していたのだけど、圧倒的な処理速度の違いに感動。
ということで今日から、はじめますAS3。

ちなみにマルコス氏はFlex Builder 2で作っていました。スクリプトだけで制作するならFlashよりもデバッグしやすく使い易いらしいです。
そういえば、同セミナーでAdobeの上条氏が「AS3になって、Flashのオーサリング = ActionScriptのクラス定義と言えるようになった」と紹介していました。
そう考えると、スクリプト系Flash使いの開発環境の選択肢としてFlex Builder 2も十分に考えられそうです。

このアーカイブについて

このページには、2006年7月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2006年5月です。

次のアーカイブは2006年8月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.1