Environment

IE での Active X セキュリティー回避 Javascript

最近 Flash などの Active X コンテンツを扱うサイトに訪問するたびに、ワンクリックしなければコンテンツがアクティブ化されない。これは SP 2 がインストールされたマシーンでの Internet Explorer の Active X セキュリティの仕様が変更したためらしい。基本的にはサイト上の Flash などの Active X コンテンツはユーザーの何らかのアクションを基に動くものだから、これはユーザーにとっては結構迷惑な話かもしれない。自分も突然 Flash コンテンツ全体が mouseover されるようになって驚いた。

この回避策は凄い簡単。Flash などの Active X コンテンツを外部の Javascript で読みこめば終了。Adobe からもこれに対応した Javascript Library が公開されているし、何人かの開発者の方も自作されている。

http://www.adobe.com/jp/devnet/activecontent/articles/devletter.html

自分も自分の使いやすいように、Active X セキュリティ回避用 Javascript Library(write_swf.js)を作ってみた。様は、swf を HTML 上に表示するために必要な項目、場合によって必要な項目、FlashVars の様に状況に応じて必要な項目を連想配列によって getSwfElement という関数に渡し設定し、writeSwf に swf を表示させたい場所の id を受け渡すことによって表示される。サンプルファイルは下記の通りである。
FlashVars に関して Array の length 分、fv0, fv1, fv2,・・・といった形で Flash 内で取得することができる。また、注意点として、Javascript の内部エンコードと html のエンコードを一致させないと Internet Explorer などでは表示されないので、エンコードは一致させるようにする。ここではエンコードを UTF-8 に統一している。

【ダウンロード】
write_swf.zip


【サンプルソース】


<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>test</title>
<script language="Javascript" type="text/javascript" src="./js/write_swf.js"></script>
<script language="Javascript" type="text/javascript">
<!--
var swf_obj = new Object();

// 必要な項目
swf_obj['Version'] = 8;
swf_obj['URL'] = './test.swf';
swf_obj['width'] = '550';
swf_obj['height'] = '400';
swf_obj['id'] = 'test';

/*
// 下記の変数が必要な場合、コメントアウトを取り記述する
swf_obj['align'] = 'middle';
swf_obj['allowScriptAccess'] = 'sameDomain';
swf_obj['quality'] = 'high';
swf_obj['bgcolor'] = '#000000';
*/

/*
// FlashVars が必要な場合は、コメントアウトを削除し、下記の形式で記述する
swf_obj['flashvars'] = new Array('test1', 'test2');
*/

getSwfElement(swf_obj);
//-->
</script>
</head>
<body bgcolor="#FFFFFF">
<div id="swf">
<script language="Javascript" type="text/javascript">
<!--
writeSwf('swf');
//-->
</script>
</div>
</body>
</html>

ページの一番上へ移動

10.0.2 アップデートで修正された問題に関連して

会社で開発していた Flash コンテンツを納期に伴ないクライアントにソースごと渡すことに。で、問題が発生。クライアントの PC で全くコンパイルできない現象が起きた。いやコンパイルして swf は書き出されているんだけど、空の swf が出来上がる感じ。

一応会社の PC の状況をエミュレートして色々試してみると、A,B の PC でコンパイルできて、C,D では出来ない。出来ない PC で試しにメインクラスに trace('hello'); とかしても trace が出ない。今回はコンポーネントの数個インストールしているし、あの en/ja 問題に関連しているのかとか色々間違った方向に考えていたんだけど、説明つく理由が見当たらない。Debug Movie で書き出すと、Flash ファイルに関連するクラスファイルが見当たらない的なアラートが出る始末。class パスもメインクラスもちゃんと存在しているのに。

「自分の PC でコンパイル出来るのに何故同僚やクライアントは出来ないのだ!?」「Flex Builder 怪しくね!?」とか不毛にどんどん深く悩んでいたんだが、ふと個人 Mac を会社に持ってきてコンパイルすると普通に出来る。両方の PC の共通点を探すと 10.0.2 になってました。このマイナーアップデートはそこまで大きな変化は無いだろうとか考えていたんですが、下記のような問題点が沢山改善されているんですね。

Flash CS4 Professional 10.0.2 アップデートで修正された問題

サイズの大きいプロジェクトファイルのコンパイルに関する問題という見出しも!!

今回は papervision3D、コンポーネント、フレームワークなど比較的大きなクラスファイルを同時にコンパイルしようとしていたため、何らかの理由でコンパイルが正常に出来なかったのだろう。

ということで、ちゃんと細目にアップデートしようという話でした。

ページの一番上へ移動