Re:IE、FirefoxでFlashから新規ウィンドウを開く際にポップアップブロックされる件の回避 - 0x集積蔵より
parametersにexternalを渡すとExternalInterfaceでwindow.openを呼ぶ。それ以外はnavigateToURLで新しくページを開く
package {
import flash.external.ExternalInterface;
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
[SWF(width='100',height='100',backgroundColor='#FFFFFF')]
public class popup extends Sprite {
public function popup() {
var sp:Sprite = this.addChild(new Sprite()) as Sprite;
sp.graphics.beginFill(0x000000, 0.5);
sp.graphics.drawRect(0, 0, 100, 100);
sp.graphics.endFill();
var url:String = 'popup.html';
var param:Object = this.loaderInfo.parameters;
sp.addEventListener(MouseEvent.CLICK,function(e:MouseEvent):void{
if (!param.external) {
navigateToURL(new URLRequest(url),"_blank");
} else {
ExternalInterface.call('function(url){window.open(url,"_blank");}',url);
}
},false);
}
}
}
window.GeckoActiveXObjectのチェックでGeckoエンジンかどうかを判定していましたが、この方法だとWindows版Firefoxしか判定できていませんでした。Firefox(Gecko)の判定を下記の通りuserAgentがGeckoだったらwindow.isGeckoをtrueにする方法に修正しました。
if (window.navigator && navigator.userAgent && navigator.userAgent.indexOf("Gecko/") != -1) window.isGecko = true;
プログラマ気分 | 【AS1.0/2.0】Flash から新規ウィンドウを開く際にポップアップブロックを防ぐで指摘された、&&であるべき部分が&になっていた件を修正(間違っていたのはサンプルコードだけです。)