
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でポップアップウィンドウを呼び出す

