feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS3でポップアップウィンドウ(2009/春)

AS3でポップアップウィンドウ(2009/春)

Flash Player 9以上、Action Script 3.0用にパブリッシュして(つまりAVM2環境下)、ポップアップウィンドウで何らかのページを表示させる方法。最近(2009年春)の場合。

色々調べてみたけど、Safariだとポップアップブロックをオンにしていると、どうやってもポップアップウィンドウが表示できないので、navigateToURL(urlRequest, “_blank”)で、新規ウィンドウ表示、というようにしました。おそらくこれは、現時点のSafariとAMV2(Action Script 3.0実行環境)の相性問題。

ExternalInterfaceを使うので、Security.sandboxTypeを使ってブラウザで表示されているかどうかを調べ、ExternalInterfaceが使えるかどうかを調べ、実行しているブラウザがSafariかどうかを調べ、ポップアップウィンドウが開ける環境であれば、ポップアップウィンドウをExternalInterfaceで呼び出し、どこかで不可であればnavigateToURL()で呼び出し、という感じです。

下記サンプルです。コードとしては今ひとつスマートではないですが、分かりやすめに書いてみました。
ちなみにこれを実行するとこんな感じになります

btn.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(event:MouseEvent):void
{
	var isPopup:Boolean = popup("http://feb19.jp");
	tf.text = isPopup.toString();
}
 
/*
 * ポップアップウィンドウを開きます。(Safariでは新規ウィンドウで表示)
 * @param		url	リンク先URL
 * @param		option	ポップアップウィンドウJavaScript(window.open)を実行する時のオプション文字列
 * @return	ポップアップウィンドウが理論上開けられたらtrue、ダメならfalse
 */
function popup(url:String, option:String = "width=320, height=460, toolbar=yes"):Boolean
{
	//ブラウザ上で動いているかどうか
	if(Security.sandboxType != Security.REMOTE)
	{
		//ダメでした
		navigateToURL(new URLRequest(url), "_blank");
		return false;
	}
	
	//ExternalInterfaceが使用可能かどうか
	if (!ExternalInterface.available)
	{
		//ダメでした
		navigateToURL(new URLRequest(url), "_blank");
		return false;
	}
	
	//ブラウザがSafariかどうか
	var browserAgent:String = ExternalInterface.call("function getBrowser(){ return navigator.userAgent; }");
	if (browserAgent.indexOf ("Safari") >= 0)
	{
		//Safariでした
		navigateToURL(new URLRequest(url), "_blank");
		return false;
	}
	
	//ポップアップします
	ExternalInterface.call("window.open", url, "_blank", option);
	return true;
}

AppleとAdobeで技術協力していただいてなんとか対応して欲しいものであります。(あとiPhoneにFlash乗せる、とか)

以前書いたポップアップについての記事
AS3でポップアップウィンドウを呼び出す

Tweet Share Bookmark

Navigation

prev: AS2、AS3のFileReferenceクラスを使って、オリジナルダウンローダーを作る
next: iPhone アプリ開発に効く8冊の本/iPhone SDKオススメ書籍

Recently Entries