Flash(Flex)の、ExternalInterface.objectID が、Google Chrome で取得できなかったのですが トラブル
昨日、2010年10月31日に対応してました。ほんと、びっくりしてしまいました。 もともと、Flash の問題として発生していたみたいなんですが、えらい迷惑です。 [FP-383] ExternalInterface.objectID がセットされていません。 昨日のテストでは、IE や Firefox では発生せずに、Google Chrome で起こります。 ( Flash は、10,1,85,3 ) 仕方無いので FlashVars を併用する事にしていますが、ここ最近の問題は それだけでは無く、Firefox のみ、Flash(Flex) で呼び出した JavaScript の関数内で、alert を実行するとフリーズするという現象です。 昨日、古いPC の Opera でも発生したので全ての処理で、 setTimeout("alert('文字列')", 10 ); に書き換える必要がありそうです。
// ********************************************************* // 汎用型 クリップボードコピー用 Flash ボタン // ********************************************************* package { import flash.display.*; import flash.events.*; import flash.external.*; import flash.system.*; import flash.net.*; // 表示用クラス 【Sprite】を継承 public class flashButton extends Sprite { [Bindable] [Embed("button.gif")] private var imgButton:Class; private var strid:String; // ********************************************************* // コンストラクタ // ********************************************************* public function flashButton():void { // IE:Object の id,それ以外 Embed の name strid = ExternalInterface.objectID; if ( strid == null ) { strid = stage.loaderInfo.parameters.objid; } // Firebug 用 // ExternalInterface.call("console.log", strid ); // stage の設定 stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; // マウスイベント取得用 var eventArea:Sprite = new Sprite(); eventArea.x = 0; eventArea.y = 0; eventArea.buttonMode = true; // ハンドカーソル addChild(eventArea); var imgPath:String = ExternalInterface.call( "orgCodeInit", strid ); if ( imgPath == null || imgPath == "" ) { // デフォルトのボタン画像 var myImg:Bitmap = new imgButton(); myImg.x = 0; myImg.y = 0; eventArea.addChild(myImg); } else { var loader:Loader = new Loader(); loader.load(new URLRequest(imgPath)); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function ():void { eventArea.addChild( loader ); } ); } eventArea.addEventListener(MouseEvent.CLICK, function(ev:flash.events.MouseEvent):void { // Firebug 用 // ExternalInterface.call("console.log", strid ); var shift_flg:String; var ctrl_flg:String; if ( ev.shiftKey ) { shift_flg = "1"; } else { shift_flg = "0"; } if ( ev.ctrlKey ) { ctrl_flg = "1"; } else { ctrl_flg = "0"; } var str:String = ExternalInterface.call( "orgCodeGetForClipcopy", strid, shift_flg, ctrl_flg ); // 戻された文字列に何か入っていたら // クリップボードにコピーして再び呼び出す if ( str != null && str != "" ) { System.setClipboard(str); ExternalInterface.call("orgCodeClipcopyEnd" ); } } ); } }}