Flex って画面ごとに URL を持つことが出来ないので、ディープリンク的なことは出来ないと思っていた。例えばブックマークにパラメータを積んだ URL を保存しておいてそれを呼び出すと特定の画面に飛べるとか、メールに URL が乗っかっていてそれを押すと特定の画面を呼び出したり項目を事前に埋めておいたりだとか。
が、調べてみたら、BrowserManager というもので可能なようだ。これを使うとブラウザの URL のパラメータを書き換えたり読み込んだりが出来る。これを使用して画面の状態を保存しておいたり特定の画面状態を作成したりができる。
めっちゃカンタンな例はこんな感じ。URL が browsermanagermain2.html だとなんもしなくて、browsermanagermain2.html#panel にするとポップアップで画面が出る、というだけの代物。URL のリクエストパラメータに応じて動作を切り替えられる、というのは分かると思う。# はなんなんだ、って感じですが、Flex の BrowserManager はこの # のうしろ側の文字列を解析するようです。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" applicationComplete="init()"> <mx:Script> <![CDATA[ import mx.utils.URLUtil; import mx.containers.TitleWindow; import mx.managers.PopUpManager; import mx.events.BrowserChangeEvent; import mx.managers.BrowserManager; import mx.managers.IBrowserManager; private var bm:IBrowserManager; private function init():void { bm = BrowserManager.getInstance(); bm.addEventListener(BrowserChangeEvent.BROWSER_URL_CHANGE, parseURL); bm.init("", "Welcome!");//ブラウザのTitleがWelcom!になる } private function parseURL(event:Event):void { var o:Object = URLUtil.stringToObject(bm.fragment, "&"); if (o.panel == undefined) { return; } PopUpManager.addPopUp(new TitleWindow(), this); } ]]> </mx:Script> </mx:Application>
今回はパラメータに panel というキーがあるかどうかだけを使用したけど、モチロン値も見れる。この例だと、リクエストパラメータに panel=123 とかしておけば、ActionScript 内では o.panel で 123 の値が得られる。
さすがにフツーのブラウザみたいにナンも考えなくてもディープリンク作れるわけではないのね……リクエストパラメータ自力で見て Flex の各種コンポーネントの状態構築してやる必要があるのはちと面倒だけど、まぁ仕方がないか……
あと、ブラウザ制限があるのでそこは注意が必要かも。
ディープリンクは特定のブラウザのみで機能します。次のブラウザがディープリンクをサポートしています。
Microsoft Internet Explorer 6 以降
Windows 版および Macintosh 版の FireFox
Macintosh 版の SafariAdobe Flex 3 ヘルプ より抜粋
その他必要事項は Adobe のリファレンスに書いてあります。