Mit dem neuen Feature Deep Linking von Flex 3 kann man in Flex-Inhalte "hineinverlinken". Die Flex-Anwendung muss also nicht mehr nur eine einzige Start-URL haben, sondern kann verschiedene URLs haben (analog zu Ankern auf einer HTML-Seite). Am einfachsten wird dies an einen Beispiel:

Quellcode

;p>Der Quellcode des Beispiel ist folgender:

XML:
  1. :Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()" historyManagementEnabled="false">
  2. :Script>
  3.     import mx.events.BrowserChangeEvent;
  4.     import mx.managers.IBrowserManager;
  5.     import mx.managers.BrowserManager;
  6.     import mx.utils.URLUtil;
  7.  
  8.     public var browserManager:IBrowserManager;
  9.  
  10.     /* ::::::::::::::::::::::::::::::::::::::::: */
  11.        
  12.     private function initApp():void
  13.     {
  14.          browserManager = BrowserManager.getInstance();
  15.             browserManager.addEventListener(BrowserChangeEvent.BROWSER_URL_CHANGE, parseURL);
  16.             browserManager.init("", "Title zu Beginn des Beispiels");
  17.     }
  18.     private var parsing:Boolean = false;
  19.  
  20.  
  21.     /* ::::::::::::::::::::::::::::::::::::::::: */
  22.  
  23.     private function parseURL(event:Event):void
  24.     {
  25.         parsing = true;
  26.  
  27.         var o:Object = URLUtil.stringToObject(browserManager.fragment);
  28.  
  29.         // wenn kein Tab angegeben, dann Tab = 0
  30.         if (o.tab == undefined) {
  31.             o.tab = 0;
  32.         }
  33.        
  34.         // Tab aktivieren
  35.         tabNav.selectedIndex = o.tab;
  36.  
  37.         // Browser-Title auswählen, auch Fallunterscheidung möglich (z.B. if (tabNav.selectedIndex == 0) ...)
  38.         var browTitle:String = "Deep-Linking Einstieg"; 
  39.        
  40.         // Browsertitle setzen
  41.         browserManager.setTitle(browTitle);
  42.         tabNav.validateNow();
  43.         parsing = false;       
  44.     }
  45.  
  46.     /* ::::::::::::::::::::::::::::::::::::::::: */
  47.  
  48.     private function updateURL():void
  49.     {
  50.         if (!parsing)
  51.             callLater(actuallyUpdateURL);
  52.     }
  53.  
  54.     /* ::::::::::::::::::::::::::::::::::::::::: */
  55.  
  56.     private function actuallyUpdateURL():void
  57.     {
  58.         var o:Object = {};
  59.         var t:String = "";
  60.  
  61.         if (tabNav.selectedIndex == 0) {
  62.             t = tab0.label;
  63.         }
  64.         else {
  65.             if (tabNav.selectedIndex == 1) {
  66.                 t = tab1.label;
  67.             }
  68.             else  t = tab2.label;
  69.  
  70.         }
  71.          o.tab = tabNav.selectedIndex;
  72.          var s:String = URLUtil.objectToString(o);
  73.          browserManager.setFragment(s);
  74.          browserManager.setTitle(t);
  75.     }
  76.  
  77. ]]>
  78. :Script>
  79. :TabNavigator id="tabNav" change="updateURL()" width="450" height="400" horizontalAlign="center">
  80.         :Panel label="Tab #0" id="tab0">
  81.             :Image source="@Embed('pic1.jpg')"/>
  82.         :Panel>
  83.         :Panel label="Tab #1" id="tab1">
  84.             :Image source="@Embed('pic2.jpg')"/>       
  85.         :Panel>
  86.         :Panel label="Tab #2" id="tab2">
  87.             :Image source="@Embed('pic3.jpg')"/>       
  88.         :Panel>  
  89.        
  90. :TabNavigator>
  91. :Application>

Den richtigen Inhalt anhand der URL anzeigen

Die Funktion parseURL() im Beispiel sorgt dafür, dass bei Aufruf der Anwendung geschaut wird, welche URL eingegeben wurde. Je nach URL wird der passende Inhalte angezeigt und der Titel in der Browserzeile angepasst.

Die URL ständig aktualisieren

Sieht sich der Nutzer den Content an, soll in der Browserzeile immer die entsprechende URL angezeigt werden. Über diese kann der Nutzer jederzeit wieder an dieser Stelle einsteigen, indem er sich z.B. ein Lesezeichen (Bookmark) setzt. Dies gewährleistet im Beispiel die Funktion actuallyUpdateURL().

Anpassungen am HTML-Template

Im Verzeichnis templates/client-side-detection-with-deeplinking der Flex 3 Betaversion findet sich ein Ordner mit dem Namen deeplinking. Dieses Verzeichnis kopiert man zur eigenen Flexanwendung. Es enthält JavaScript- und CSS-Dateien, die für das Deep Linking nötig sind.

Im Header der HTML-Datei muss dann folgendes hinzugefügt werden, um die Deep Linking Dateien einzubinden:

HTML:
  1.     rel="stylesheet" type="text/css" href="deeplinking/deeplinking.css" />
  2.    
  3.  
  4.    
  5.     src="deeplinking/deeplinking.js" language="javascript">
  6.    

Weitere Informationen finden sich im Adobe Labs: Flex 3: Deep Linking

Link: Beta-Version von Adobe Flex 3 (video-flash.de)