ポップアップしたウインドウ(子)とFlashがのっかってる元のウインドウ(親)はLocalConnection経由でやりとりする。
流れとしては、
元FlashでOAuthするボタンを押す
↓
子ウインドウがポップアップする
↓
TwitterのOAuthページが表示される。
↓
OAuth完了する
↓
元Flashに完了した旨が通知される。
↓
ポップアップウインドウが閉じる
↓
Twitterに各種情報をとりに行く
という感じ。
ここで問題になるのがLocalConnectionをする時に同じConnect IDを使い回すと、同じページを開いた場合にconnect対象が複数になってしまい接続が失敗する。
これを回避するためにconnect用のIDにタイムスタンプを使う。
var connectID:String = String((new Date()).getTime());
Flashから子ウインドウを開く時に、
ExternalInterface.call('window.open("' + url + '", "' + connectID + '")');
もしくは、
navigateToURL(new URLRequest(url) , connectID);
のようにwindow.nameとして生成したIDを子ウインドウに渡す。
子ウインドウはtwitterのOAuth画面が開き、
リダイレクトでもどってきたページでwindow.nameを参照し、
flashvars経由でsend用のswf(通知側)にこのIDを渡す。
send用のswfはこのIDを使ってsendしOAuthが終了したことを親ウインドウに知らせる。
connectが完了したら子ウインドウは自分でwindow.closeして閉じる。
さらに問題になるのがブラウザごとのポップアップブロックの条件。
IEはnavigateToURLがブロックされ、
MacのSafariはポップアップしたページに