<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>TONPOOBLOG &#187; SWFObject</title>
	<atom:link href="http://www.tonpoo.com/blog/category/flash/swfobject/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tonpoo.com/blog</link>
	<description>神宮前にあるWEB制作事務所「株式会社ブリコルール（bricoleur inc.）」に所属しているFlash（ActionScript）開発＆WEB制作プロジェクト「Tonpoo.com」のブログです。</description>
	<lastBuildDate>Wed, 01 Feb 2012 11:18:08 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/category/flash/swfobject/feed/" />
		<item>
		<title>IEでブラウザの「戻る」ボタンでページに戻ってきた際に、stageWidthとstageHeightの値が取得できない</title>
		<link>http://www.tonpoo.com/blog/2010/09/ie-stagewidth-stageheight/</link>
		<comments>http://www.tonpoo.com/blog/2010/09/ie-stagewidth-stageheight/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 10:35:42 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[SWFObject]]></category>
		<category><![CDATA[Troubles]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=1191</guid>
		<description><![CDATA[ああ・・・。IEよ、またお前なのね。コトのきっかけになったのはクライアントからの swfを埋め込んだhtmlページについて、サーバにアップしてIEでアクセスする分には問題ないが、ローカル環境でIEで開くとオブジェクトの位置が大幅にずれる。 ・・・というご指摘。調べてみると確かにそうなっていることを確認。さらに調べてみると、サーバにアップしたものについても IEでswfの埋めこんであるhtmlページ（A）を表示。 そのまま別のURLに遷移。 ブラウザの「戻る」ボタンで（A）に戻る。 するとswf内のオブジェクトの位置が大幅にずれる。 ・・・という現象を発見（汗）。「ななな、なんじゃこりゃあああああ！」と思ってさらにさらに調べてみると、下記の記事を発見。 stageWidth is zero in IE &#124; Blog &#124; Jodie O&#8217;Rourke IEでstage.stageWidthとstageHeightの値が０になる &#8211; フリーで活動するWeb屋のメモ帳 SWFObjectのDynamic Publishingを使うとIEとかでStage.stageWidthとheightが一瞬ゼロになるという都市伝説は実在した！ &#124; Katapad Design IEでstage.stageWidth及びstage.stageHeightが取得できない？ ・・・みなさん、苦労されてきたんですね。とりあえず、上記のみなさんの記事と今回の実際のファイルから、自分なりに発生条件や不具合の内容から解決方法までまとめてみました。 発生条件 SWFObjectを使っていること（「フリーで活躍するWeb屋のメモ帳」さんの記事では、SWFObjectを使っていなくても同じ現象に遭遇してるようなので、SWFObject非使用でも発生するのかもしれません）。 動的パブリッシュ（Dynamic Publishing）を使っている。 IEで表示（Katapad Designさんの記事では、Mac版のFirefoxでも発生するという記述があります）。 同一swfファイルの2回目以降の読み込み時に不具合が発生（私がローカル環境で検証した際には、初回の読み込み時から発生していました）。 発生する不具合 コンテンツの開始時にstage.stageWidthとstage.stageHeightの値がゼロになる。 この不具合が発生する原因そのものについてはよくわかりません。IEそのものかIE版FlashPlayerなどの潜在的なバグではないかと思いますが、それはMicrosoftなりAdobeなりが対応してくれるのを待つしか無い。 ポイントとしては、ドキュメントクラスのEvent.ADDED_TO_STAGEイベントが発生したタイミングでも、stageWidthとstageHeightの値がゼロだということ。さらに、Event.RESIZEで監視しても、初回のイベント発生時にはやはりstageWidthとstageHeightの値がゼロになりました。 対処法 「HAYASAKA修行ブログ」さんで述べられているように、解決策はいろいろあります。自分としては、「Event.ADDED_TO_STAGEの発生時にstageWidthとstageHeightの値がゼロだった場合、Event.ENTER_FRAMEでstageWidthとstageHeightの値を監視し、両方の値がゼロではなくなったら処理を継続する」という方法を採用し、汎用のユーティリティクラスメソッド（Utils.stageSizeWaiter）としてまとめてみました。 Utils.as 実際に利用する場合には、ドキュメントクラスで以下のように使います。 Main.as Katapad DesignさんのようにEventDispatcherにしたほうがスマートかなと思ったりもしてますが、こういう方法もあるってことで・・・。 ああ、疲れました（汗）。]]></description>
			<content:encoded><![CDATA[<p>ああ・・・。<strong>IEよ、またお前なのね。</strong>コトのきっかけになったのはクライアントからの</p>
<blockquote>
<p>swfを埋め込んだhtmlページについて、サーバにアップしてIEでアクセスする分には問題ないが、<strong>ローカル環境でIEで開くとオブジェクトの位置が大幅にずれる。</strong></p>
</blockquote>
<p>・・・というご指摘。調べてみると確かにそうなっていることを確認。さらに調べてみると、サーバにアップしたものについても</p>
<ol>
<li>IEでswfの埋めこんであるhtmlページ（A）を表示。</li>
<li>そのまま別のURLに遷移。</li>
<li><strong>ブラウザの「戻る」ボタンで（A）に戻る。</strong></li>
<li>するとswf内のオブジェクトの位置が大幅にずれる。</li>
</ol>
<p>・・・という現象を発見（汗）。<strong>「ななな、なんじゃこりゃあああああ！」</strong>と思ってさらにさらに調べてみると、下記の記事を発見。</p>
<ul>
<li><a href="http://jodieorourke.com/view.php?id=79&amp;blog=news" target="_blank"><strong>stageWidth is zero in IE | Blog | Jodie O&#8217;Rourke</strong></a></li>
<li><a href="http://blog.apri-cot.com/2010/03/iestagestagewidthstageheight.html" target="_blank"><strong>IEでstage.stageWidthとstageHeightの値が０になる &#8211; フリーで活動するWeb屋のメモ帳</strong></a></li>
<li><a href="http://katapad.com/wp/2009/05/19/stage_size_zero_issue_with_swfobject_on_ie/" target="_blank"><strong>SWFObjectのDynamic Publishingを使うとIEとかでStage.stageWidthとheightが一瞬ゼロになるという都市伝説は実在した！ | Katapad Design</strong></a></li>
<li><a href="http://blog.magical-remix.net/urame/archives/552" target="_blank"><strong>IEでstage.stageWidth及びstage.stageHeightが取得できない？</strong></a></li>
</ul>
<p>・・・みなさん、苦労されてきたんですね。とりあえず、上記のみなさんの記事と今回の実際のファイルから、自分なりに発生条件や不具合の内容から解決方法までまとめてみました。</p>
<p><span id="more-1191"></span></p>
<h2>発生条件</h2>
<ul>
<li><strong>SWFObjectを使っている</strong>こと（「フリーで活躍するWeb屋のメモ帳」さんの記事では、SWFObjectを使っていなくても同じ現象に遭遇してるようなので、SWFObject非使用でも発生するのかもしれません）。</li>
<li><strong>動的パブリッシュ（Dynamic Publishing）</strong>を使っている。</li>
<li><strong>IEで表示</strong>（Katapad Designさんの記事では、Mac版のFirefoxでも発生するという記述があります）。</li>
<li><strong>同一swfファイルの2回目以降の読み込み時</strong>に不具合が発生（私がローカル環境で検証した際には、初回の読み込み時から発生していました）。</li>
</ul>
<h2>発生する不具合</h2>
<h3><strong>コンテンツの開始時にstage.stageWidthとstage.stageHeightの値がゼロになる。</strong></h3>
<p>この不具合が発生する原因そのものについてはよくわかりません。IEそのものかIE版FlashPlayerなどの潜在的なバグではないかと思いますが、それはMicrosoftなりAdobeなりが対応してくれるのを待つしか無い。</p>
<p>ポイントとしては、ドキュメントクラスの<strong>Event.ADDED_TO_STAGE</strong>イベントが発生したタイミングでも、<strong>stageWidthとstageHeightの値がゼロ</strong>だということ。さらに、<strong>Event.RESIZE</strong>で監視しても、<strong>初回のイベント発生時にはやはりstageWidthとstageHeightの値がゼロ</strong>になりました。</p>
<h2>対処法</h2>
<p>「HAYASAKA修行ブログ」さんで述べられているように、解決策はいろいろあります。自分としては、「<strong>Event.ADDED_TO_STAGEの発生時にstageWidthとstageHeightの値がゼロだった場合、Event.ENTER_FRAMEでstageWidthとstageHeightの値を監視し、両方の値がゼロではなくなったら処理を継続する</strong>」という方法を採用し、汎用のユーティリティクラスメソッド（Utils.stageSizeWaiter）としてまとめてみました。</p>
<h3>Utils.as</h3>
<pre class="brush: as3; title: ; notranslate">package {
	import flash.display.Stage;
	import flash.events.Event;

	public class Utils {
		private static var _nextFunction:Function;	//ステージサイズ取得後に実行する継続処理
		private static var _targetStage:Stage;	//ステージへの参照
		public static function stageSizeWaiter(targetStage:Stage, nextFunction:Function):void {
			if ((targetStage.stageWidth * targetStage.stageHeight) == 0) {
				//stageWidthとstageHeightの値がゼロの場合はENTER_FRAMEで監視
				_nextFunction = nextFunction;
				_targetStage = targetStage;
				targetStage.addEventListener(Event.RESIZE, stageSizeListener, false, 0, true);
			}else {
				//stageWidthとstageHeightの値が取得済みの場合はそのまま継続処理を続行
				nextFunction();
			}
		}
		private static function stageSizeListener(e:Event = null):void {
			if ((_targetStage.stageWidth * _targetStage.stageHeight) != 0) {
				_nextFunction();	//継続処理を実行
				_targetStage.removeEventListener(Event.RESIZE, stageSizeListener);	//不要になったイベントリスナを削除
				_nextFunction = null;	//不要な参照を破棄
				_targetStage = null;	//不要な参照を破棄
			}
		}
	}
}</pre>
<p>実際に利用する場合には、ドキュメントクラスで以下のように使います。</p>
<h3>Main.as</h3>
<pre class="brush: as3; title: ; notranslate">package  {
	import flash.events.Event;
	import Utils;

	public final class Main extends Sprite{
		public function Main() {
			this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true);
		}
		private function onAddedToStage(e:Event):void {
			this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
			/*
			* ADDED_TO_STAGEイベントが発生したら、ステージへの参照と
			* ステージサイズ確定後に実行するファンクションを引数に
			* して、Utils.stageSizeWaiterを実行。
			*/
			Utils.stageSizeWaiter(this.stage, onStageSizeObtained);
		}
		private function onStageSizeObtained():void {
			/*
			* このファンクションの実行時には確実にstageWidthと
			* stageHeightの値が確定している。
			*/
			sw = this.stage.stageWidth;
			sh = this.stage.stageHeight;
		}
	}
}</pre>
<p>Katapad DesignさんのようにEventDispatcherにしたほうがスマートかなと思ったりもしてますが、こういう方法もあるってことで・・・。</p>
<p>ああ、疲れました（汗）。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2010/09/ie-stagewidth-stageheight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2010/09/ie-stagewidth-stageheight/" />
	</item>
		<item>
		<title>Error calling method on NPObject</title>
		<link>http://www.tonpoo.com/blog/2010/07/error-calling-method-on-npobject/</link>
		<comments>http://www.tonpoo.com/blog/2010/07/error-calling-method-on-npobject/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 02:37:05 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[SWFObject]]></category>
		<category><![CDATA[SWFWheel]]></category>
		<category><![CDATA[Troubles]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=1166</guid>
		<description><![CDATA[製作中のとあるフルFlashサイト。ブラウザで普通に確認してる分には問題なく動作していたため全く気がつかなかったが、Firefoxのエラーコンソールを開いてみると「Error calling method on NPObject」というJavaScriptエラーが頻発！「なんじゃこりゃ」ということで早速調べてみたところ、原因がわかりました。 まず、今回のサイトは以下のような条件が揃っていました。 SWFファイルのドメインと、そのSWFファイルを埋め込んで表示するHTMLファイルのドメインが異なっている（SWFは http://www.hogehoge.home/movie.swf にあり、HTMLファイルは http://user.hogehoge.home/index.html にある、というような感じ） マウスホイール対応のためにSWFWheelを使用 SWFファイルの埋め込みにSWFObjectを使用 そしてSWFWheelのサイトを見ていたところ、以下のような注意書きが： その他 外部ドメインからの読み込み SWFWheelを使ったswfファイルを、外部ドメインから読み込む場合、HTML側とActionScript側の両方でExternalInterfaceの動作を明示的に許可する必要があります。 HTML側にて、paramタグ及びembedタグでallowScriptAccessの値にalwaysを指定する。 ActionScript側にて、Security.allowDomain等で許可するドメインを指定する。 ビンゴですね。1.の方は対応済みだったんですが、2.の方が未対応でした。ところで今回のサイト、サブドメインの数が一定でなく、運用後に随時追加される可能性があります。ので、ワイルドカードを使って以下のようなコードを追加。 結果は・・・？ダメでした。まだエラーが出ます。うーん、もしかしてワイルドカードでサブドメインを指定するのは無理なのか？ということで、今度は以下のコードで実験。 成功！エラーがでなくなりました。全ドメインを対象にしてしまうのは危険といえば危険ですが、現時点ではこれが最善の策でしょうか。]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.tonpoo.com/blog/wp-content/uploads/2010/07/ss.jpg" border="0" alt="ss" title="ss" width="494" height="307" style="display: inline; border: 0px;" /></p>
<p>製作中のとあるフルFlashサイト。ブラウザで普通に確認してる分には問題なく動作していたため全く気がつかなかったが、Firefoxのエラーコンソールを開いてみると「<strong><span style="color: #ff0000;">Error calling method on NPObject</span></strong>」というJavaScriptエラーが頻発！「<strong>なんじゃこりゃ</strong>」ということで早速調べてみたところ、原因がわかりました。</p>
<p>まず、今回のサイトは以下のような条件が揃っていました。</p>
<ul>
<li>SWFファイルのドメインと、そのSWFファイルを埋め込んで表示するHTMLファイルの<strong>ドメインが異なっている</strong>（SWFは http://www.hogehoge.home/movie.swf にあり、HTMLファイルは http://user.hogehoge.home/index.html にある、というような感じ）</li>
<li>マウスホイール対応のために<strong><a href="http://www.libspark.org/wiki/SWFWheel" target="_blank">SWFWheel</a></strong>を使用</li>
<li>SWFファイルの埋め込みに<strong><a href="http://code.google.com/p/swfobject/" target="_blank">SWFObject</a></strong>を使用</li>
</ul>
<p>そしてSWFWheelのサイトを見ていたところ、以下のような<a href="http://www.libspark.org/wiki/SWFWheel#%E5%A4%96%E9%83%A8%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%8B%E3%82%89%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF" target="_blank">注意書き</a>が：</p>
<blockquote>
<h2>その他</h2>
<h3 id="外部ドメインからの読み込み">外部ドメインからの読み込み</h3>
<p>SWFWheelを使ったswfファイルを、外部ドメインから読み込む場合、HTML側とActionScript側の両方でExternalInterfaceの動作を明示的に許可する必要があります。</p>
<ol>
<li>HTML側にて、paramタグ及びembedタグでallowScriptAccessの値にalwaysを指定する。</li>
<li>ActionScript側にて、Security.allowDomain等で許可するドメインを指定する。</li>
</ol>
</blockquote>
<p><strong>ビンゴ</strong>ですね。1.の方は対応済みだったんですが、2.の方が未対応でした。ところで今回のサイト、サブドメインの数が一定でなく、運用後に随時追加される可能性があります。ので、ワイルドカードを使って以下のようなコードを追加。</p>
<pre class="brush: as3; title: ; notranslate">Security.allowDomain(&quot;*.hogehoge.home&quot;);</pre>
<p>結果は・・・？ダメでした。まだエラーが出ます。うーん、もしかして<strong>ワイルドカードでサブドメインを指定するのは無理</strong>なのか？ということで、今度は以下のコードで実験。</p>
<pre class="brush: as3; title: ; notranslate">Security.allowDomain(&quot;*&quot;);</pre>
<p>成功！<strong>エラーがでなくなりました</strong>。全ドメインを対象にしてしまうのは危険といえば危険ですが、現時点ではこれが最善の策でしょうか。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2010/07/error-calling-method-on-npobject/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2010/07/error-calling-method-on-npobject/" />
	</item>
		<item>
		<title>FlashからExternalInterfaceクラスを使ってLightboxを呼び出す</title>
		<link>http://www.tonpoo.com/blog/2009/12/flash-externalinterface-lightbox/</link>
		<comments>http://www.tonpoo.com/blog/2009/12/flash-externalinterface-lightbox/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 13:55:06 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[ActionScript2]]></category>
		<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[SWFObject]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=649</guid>
		<description><![CDATA[「Flash（swf）からLightboxを呼び出す」というニーズがこれまでに何回かあり、またついさっきもあって、その都度ちょっと面倒だったりしたのでメモ。なお、ウチの会社ではswfファイルの埋め込みには通常swfobject2を使ってるので、以下は「Lightbox2.04 + swfobject2 + ActionScript（ExternalInterfaceクラス）」という組み合わせが前提となっています。 Lightboxを入手 まず使用するLightboxのバージョンは2.04。Lokesh Dhakar氏によるLightbox 2の公式サイトで入手。 ベースHTMLの作成 次にベースとなるHTMLを作成。今回はとりあえずSWFObject 2 HTML and JavaScript ジェネレーターを使ってサクっと作りました。ポイントとしては、「SWFの定義」のオプションを一部変更すること。 まず、Lightboxを表示した際に、swfコンテンツが上に来てしまうのを避けるため、wmodeをtransparentに設定。また、ExternalInterfaceクラスを使うので、allowscriptaccessをalwaysに設定。できあがったHTMLは下記の通り： Lightbox用のライブラリを組み込み 上記のベースHTMLのheadセクションに、Lightbox動作のためのjsファイルとcssファイルを組み込む下記の記述を追加。 Lightboxを起動させるJavaScriptメソッドを追加 Lightboxを直接起動させるJavaScriptのメソッドがないので、下記ページを参考にそのためのメソッドを追加。 Execute Lightbox Scripts From Flash at Codefidelity （情報元：Flash から Lightbox を起動する方法 &#8211; minorio のプログラミング・メモ） 具体的に追加する内容は下記の通り。 最終的にできあがったhtmlは下記の通り。 ExternalInterfaceで呼び出し 次はFlash側の用意。sample.flaというファイル（ActionScript3）を用意、ステージ上にボタン用のMovieClipインスタンスを３つ配置し、それぞれbtn0, btn1, btn2という名前を付ける。sample.flaのドキュメントクラスとしてSampleクラスを指定。Sample.asの内容は下記の通り。 これで完成！ オマケ：IE7～8でのLightboxの表示バグフィックス Lightboxを使った縦に長いページをIEで閲覧した場合、ページをスクロールしてからLightboxを起動すると、Lightboxの背景（黒い透過）部分が途中で切れてしまう。これを回避するためにとりあえずやったのがlightbox.cssの改造。具体的には#overlayのpositionをabsoluteからfixに変更（+IE6ではおかしくなってしまうので、スターハックを使ってabsoluteのまま）部分を下記のようにしました。 以上、備忘録もかねて参考までに。]]></description>
			<content:encoded><![CDATA[<p>「Flash（swf）からLightboxを呼び出す」というニーズがこれまでに何回かあり、またついさっきもあって、その都度ちょっと面倒だったりしたのでメモ。なお、ウチの会社ではswfファイルの埋め込みには通常swfobject2を使ってるので、以下は<strong>「Lightbox2.04 + swfobject2 + ActionScript（ExternalInterfaceクラス）」</strong>という組み合わせが前提となっています。</p>
<h3>Lightboxを入手</h3>
<p>まず使用するLightboxのバージョンは2.04。<strong><a href="http://www.huddletogether.com/projects/lightbox2/#download" target="_blank">Lokesh Dhakar氏によるLightbox 2の公式サイト</a></strong>で入手。</p>
<h3>ベースHTMLの作成</h3>
<p>次にベースとなるHTMLを作成。今回はとりあえず<strong><a href="http://www.tonpoo.com/docs/swfobject_generator/" target="_blank">SWFObject 2 HTML and JavaScript ジェネレーター</a></strong>を使ってサクっと作りました。ポイントとしては、「SWFの定義」のオプションを一部変更すること。<br />
<img src="http://www.tonpoo.com/blog/wp-content/uploads/2009/12/ss1.jpg" alt="ss1" title="ss1" width="350" height="287" class="alignnone size-full wp-image-656" /></p>
<p><span id="more-649"></span></p>
<p>まず、Lightboxを表示した際に、swfコンテンツが上に来てしまうのを避けるため、wmodeをtransparentに設定。また、ExternalInterfaceクラスを使うので、allowscriptaccessをalwaysに設定。できあがったHTMLは下記の通り：</p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;ja&quot; xml:lang=&quot;ja&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
		&lt;title&gt;&lt;/title&gt;
		&lt;meta http-equiv=&quot;Content-Script-Type&quot; content=&quot;text/javascript;&quot; /&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;swfobject.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			var flashvars = {};
			var params = {};
			params.wmode = &quot;transparent&quot;;
			params.allowscriptaccess = &quot;always&quot;;
			var attributes = {};
			swfobject.embedSWF(&quot;sample.swf&quot;, &quot;myAlternativeContent&quot;, &quot;800&quot;, &quot;600&quot;, &quot;9.0.0&quot;, false, flashvars, params, attributes);
		&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;div id=&quot;myAlternativeContent&quot;&gt;
			&lt;a href=&quot;http://www.adobe.com/go/getflashplayer_jp&quot;&gt;
				&lt;img src=&quot;http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif&quot; alt=&quot;Get Adobe Flash player&quot; /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<h3>Lightbox用のライブラリを組み込み</h3>
<p>上記のベースHTMLのheadセクションに、Lightbox動作のためのjsファイルとcssファイルを組み込む下記の記述を追加。</p>
<pre class="brush: xml; title: ; notranslate">&lt;script type=&quot;text/javascript&quot; src=&quot;js/prototype.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/scriptaculous.js?load=effects,builder&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/lightbox.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;css/lightbox.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;</pre>
<h3>Lightboxを起動させるJavaScriptメソッドを追加</h3>
<p>Lightboxを直接起動させるJavaScriptのメソッドがないので、下記ページを参考にそのためのメソッドを追加。</p>
<p><strong><a href="http://blog.codefidelity.com/?p=16" target="_blank">Execute Lightbox Scripts From Flash at Codefidelity</a></strong><br />
（情報元：<strong><a href="http://d.hatena.ne.jp/minorio/20080927/1222513402" target="_blank">Flash から Lightbox を起動する方法 &#8211; minorio のプログラミング・メモ</a></strong>）</p>
<p>具体的に追加する内容は下記の通り。</p>
<pre class="brush: xml; title: ; notranslate">&lt;script type=&quot;text/javascript&quot;&gt;
function LightboxDelegate(url,caption) {
	var objLink = document.createElement('a');
	objLink.setAttribute('href',url);
	objLink.setAttribute('rel','lightbox');
	objLink.setAttribute('title',caption);
	Lightbox.prototype.start(objLink);
}
&lt;/script&gt;
</pre>
<p>最終的にできあがったhtmlは下記の通り。</p>
<pre class="brush: xml; title: ; notranslate">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;ja&quot; xml:lang=&quot;ja&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
		&lt;title&gt;&lt;/title&gt;
		&lt;meta http-equiv=&quot;Content-Script-Type&quot; content=&quot;text/javascript;&quot; /&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;swfobject.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/prototype.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/scriptaculous.js?load=effects,builder&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/lightbox.js&quot;&gt;&lt;/script&gt;
		&lt;link rel=&quot;stylesheet&quot; href=&quot;css/lightbox.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
		&lt;script type=&quot;text/javascript&quot;&gt;
			//swfobject関係
			var flashvars = {};
			var params = {};
			params.wmode = &quot;transparent&quot;;
			params.allowscriptaccess = &quot;always&quot;;
			var attributes = {};
			swfobject.embedSWF(&quot;sample.swf&quot;, &quot;myAlternativeContent&quot;, &quot;600&quot;, &quot;400&quot;, &quot;9.0.0&quot;, false, flashvars, params, attributes);
			//LightboxDelegate関係
			function LightboxDelegate(url,caption) {
				var objLink = document.createElement('a');
				objLink.setAttribute('href',url);
				objLink.setAttribute('rel','lightbox');
				objLink.setAttribute('title',caption);
				Lightbox.prototype.start(objLink);
			}
		&lt;/script&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;div id=&quot;myAlternativeContent&quot;&gt;
			&lt;a href=&quot;http://www.adobe.com/go/getflashplayer_jp&quot;&gt;
				&lt;img src=&quot;http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif&quot; alt=&quot;Get Adobe Flash player&quot; /&gt;
			&lt;/a&gt;
		&lt;/div&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<h3>ExternalInterfaceで呼び出し</h3>
<p>次はFlash側の用意。sample.flaというファイル（ActionScript3）を用意、ステージ上にボタン用のMovieClipインスタンスを３つ配置し、それぞれbtn0, btn1, btn2という名前を付ける。sample.flaのドキュメントクラスとしてSampleクラスを指定。Sample.asの内容は下記の通り。</p>
<pre class="brush: as3; title: ; notranslate">package {
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.external.ExternalInterface;

	public class Sample extends MovieClip{
		public function Sample() {
			//Lightbox用の設定
			lightboxArray = new Array();
			lightboxArray[0] = {
				src:&quot;images/photo0.jpg&quot;,
				caption:&quot;写真その0&quot;
			};
			lightboxArray[1] = {
				src:&quot;images/photo1.jpg&quot;,
				caption:&quot;写真その1&quot;
			};
			lightboxArray[2] = {
				src:&quot;images/photo2.jpg&quot;,
				caption:&quot;写真その2&quot;
			};
			//ボタンの設定
			for (var i:uint = 0; i &lt; 3; i++) {
				var btn:MovieClip = this[&quot;btn&quot; + i];
				btn.id = i;
				btn.buttonMode = true;
				btn.addEventListener(MouseEvent.CLICK, onBtnClick, false, 0, true);
			}
		}

		public var lightboxArray:Array;
		public var btn0:MovieClip;
		public var btn1:MovieClip;
		public var btn2:MovieClip;

		//ボタン用メソッド
		public function onBtnClick(e:MouseEvent):void {
			var btn:MovieClip = e.target as MovieClip;
			var id:uint = btn.id;
			var src:String = lightboxArray[id].src;
			var caption:String = lightboxArray[id].caption;
			//LightboxDelegateメソッドを呼び出し
			ExternalInterface.call(&quot;LightboxDelegate&quot;,src,caption );
		}
	}
}</pre>
<p>これで完成！</p>
<h3>オマケ：IE7～8でのLightboxの表示バグフィックス</h3>
<p>Lightboxを使った縦に長いページをIEで閲覧した場合、ページをスクロールしてからLightboxを起動すると、Lightboxの背景（黒い透過）部分が途中で切れてしまう。これを回避するためにとりあえずやったのが<strong>lightbox.css</strong>の改造。具体的には#overlayのpositionをabsoluteからfixに変更（+IE6ではおかしくなってしまうので、スターハックを使ってabsoluteのまま）部分を下記のようにしました。</p>
<pre class="brush: css; title: ; notranslate">#overlay {
	position: fixed;
	top: 0;
	left: 0;
	z-index: 90;
	width: 100%;
	height: 500px;
	background-color: #000;
}
* html #overlay {
	position: absolute;
}</pre>
<p>以上、備忘録もかねて参考までに。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2009/12/flash-externalinterface-lightbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2009/12/flash-externalinterface-lightbox/" />
	</item>
		<item>
		<title>SWFObject 2 HTML and JavaScript ジェネレーター v1.2</title>
		<link>http://www.tonpoo.com/blog/2009/08/swfobject-2-html-and-javascript-v1-2/</link>
		<comments>http://www.tonpoo.com/blog/2009/08/swfobject-2-html-and-javascript-v1-2/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 11:08:14 +0000</pubDate>
		<dc:creator>tonpoo</dc:creator>
				<category><![CDATA[SWFObject]]></category>

		<guid isPermaLink="false">http://www.tonpoo.com/blog/?p=519</guid>
		<description><![CDATA[swfobjectのプロジェクトサイトで提供されている「SWFObject 2 HTML and JavaScript generator v1.2」を、日本語環境で（というかTonpoo個人にとって）使いやすいよう一部カスタマイズした上で日本語化してみました！ 【SWFObject 2 HTML and JavaScript ジェネレーター v1.2】 （特に開発者サイドの許可をとってないんですが、MITライセンスで、コピーライト表記をソースコード中にそのまま残しているので、これで大丈夫なんでしょうか・・・。ちょっと不安。） ちなみに、オリジナル版からのカスタマイズ点は下記の通り。 文字コードの指定にShift_JISを追加。 文字コードのデフォルト値をutf-8に変更。 パブリッシュ方法のデフォルト値を「動的パブリッシュ」に設定。 HTMLテンプレートのデフォルト値を「XHTML 1.0 Transitional」に設定。 出力されるHTMLコードの言語系の属性の値をenからjaに変更。 出力されるHTMLコードのmeta要素などの出現順序を変更。 出力されるHTMLコードの中に、ドキュメント内でJavaScriptを使用していることを示すためのmeta要素を追加。 出力されるHTMLコードの中に記述される、FlashPlayerのダウンロードリンクのリンク先を、Adobeの日本語サイトに変更。 追記：当サイトでの公開について念のため確認し、了承をいただきました。に加えて、公式サイト内のWikiページからリンクを張って頂きました！]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/swfobject/">swfobjectのプロジェクトサイト</a>で提供されている「<a href="http://www.bobbyvandersluis.com/swfobject/generator/index.html">SWFObject 2 HTML and JavaScript generator v1.2</a>」を、日本語環境で（というかTonpoo個人にとって）使いやすいよう一部カスタマイズした上で日本語化してみました！</p>
<h3><a href="http://www.tonpoo.com/docs/swfobject_generator/">【SWFObject 2 HTML and JavaScript ジェネレーター v1.2】</a></h3>
<p><span style="text-decoration: line-through;">（特に開発者サイドの許可をとってないんですが、MITライセンスで、コピーライト表記をソースコード中にそのまま残しているので、これで大丈夫なんでしょうか・・・。ちょっと不安。）</span></p>
<p>ちなみに、オリジナル版からのカスタマイズ点は下記の通り。</p>
<ul style="text-align: left;">
<li>文字コードの指定にShift_JISを追加。</li>
<li>文字コードのデフォルト値をutf-8に変更。</li>
<li>パブリッシュ方法のデフォルト値を「動的パブリッシュ」に設定。</li>
<li>HTMLテンプレートのデフォルト値を「XHTML 1.0 Transitional」に設定。</li>
<li>出力されるHTMLコードの言語系の属性の値をenからjaに変更。</li>
<li>出力されるHTMLコードのmeta要素などの出現順序を変更。</li>
<li>出力されるHTMLコードの中に、ドキュメント内でJavaScriptを使用していることを示すためのmeta要素を追加。</li>
<li>出力されるHTMLコードの中に記述される、FlashPlayerのダウンロードリンクのリンク先を、Adobeの日本語サイトに変更。</li>
</ul>
<p>追記：当サイトでの公開について念のため確認し、了承をいただきました。に加えて、<a href="http://code.google.com/p/swfobject/wiki/generator">公式サイト内のWikiページ</a>からリンクを張って頂きました！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tonpoo.com/blog/2009/08/swfobject-2-html-and-javascript-v1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.tonpoo.com/blog/2009/08/swfobject-2-html-and-javascript-v1-2/" />
	</item>
	</channel>
</rss>

