IEでFlashから_blankでリンクを呼び出すと、ポップアップブロックがかかります。
ブロックを回避するにはExternalInterfaceクラスを使って、JavaScriptのwindow.openメソッドから別ウィンドウを立ち上げるのがよいみたいです。
IEのときのみswfobjectで渡すパラメータに[external:true]を追加して、その有無によって判定する方法で解決しました。
▽JavaScript
<script type="text/javascript">
var flashvars = {};
var params = {wmode:"transparent"};
var attributes = {};
if (window.isGecko || window.ActiveXObject){
flashvars = {external:true};
params = {wmode:"transparent", external:true};
}
swfobject.embedSWF("main.swf", "main", "100%", "100%", "9.0.00", "js/expressInstall.swf", flashvars, params, attributes );
</script>
▽AS
private function openWindowHandler(e:Event):void
{
var params:Object = this.loaderInfo.parameters;
var url:String = "http://www.google.com";
if (!params["external"]) {
navigateToURL(new URLRequest(url),"_blank");
} else {
ExternalInterface.call('function(url){window.open(url, "_blank");}', url);
}
}
FlashからJavascriptを呼べるんだから、ブラウザ判定もFlashでやった方がスマートでは?というお声をいただいたので、次回はFlash側だけで対処するようにしてみます。
こんな感じで出来る気がする..
-----
import flash.external.ExternalInterface;
-----
var agent:String = String(ExternalInterface.call("function getBrowser(){return navigator.userAgent;}"));
var url:String = "http://www.google.com";
if (agent.indexOf("MSIE") != -1) {
navigateToURL(new URLRequest(url),"_blank");
} else {
ExternalInterface.call('function(url){window.open(url, "_blank");}', url);
}
▽参考
FlashでnavigateToURLのパラメータに"_blank"を使った際のIEにおけるポップアップブロック問題(10/4/10修正版):戦意
IE、FirefoxでFlashから新規ウィンドウを開く際にポップアップブロックされる件を回避するバッドノウハウ(2008/02/12版)
ActionScript3 ポップアップブロック回避:ゴロゴロな一日