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:
- deeplinking.html (die URL der HTML-Seite mit der Flexanwendung, Tab 0 als Inhalt)
- deeplinking.html#tab=1 (Deep Link, der direkt den Inhalt von Tab 1 anzeigt)
- deeplinking.html#tab=2 (Deep Link, der direkt den Inhalt von Tab 2 anzeigt)
Quellcode
;p>Der Quellcode des Beispiel ist folgender:
-
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()" historyManagementEnabled="false">
-
<mx:Script>
-
<![CDATA[
-
import mx.events.BrowserChangeEvent;
-
import mx.managers.IBrowserManager;
-
import mx.managers.BrowserManager;
-
import mx.utils.URLUtil;
-
-
public var browserManager:IBrowserManager;
-
-
/* ::::::::::::::::::::::::::::::::::::::::: */
-
-
private function initApp():void
-
{
-
browserManager = BrowserManager.getInstance();
-
browserManager.addEventListener(BrowserChangeEvent.BROWSER_URL_CHANGE, parseURL);
-
browserManager.init("", "Title zu Beginn des Beispiels");
-
}
-
private var parsing:Boolean = false;
-
-
-
/* ::::::::::::::::::::::::::::::::::::::::: */
-
-
private function parseURL(event:Event):void
-
{
-
parsing = true;
-
-
var o:Object = URLUtil.stringToObject(browserManager.fragment);
-
-
// wenn kein Tab angegeben, dann Tab = 0
-
if (o.tab == undefined) {
-
o.tab = 0;
-
}
-
-
// Tab aktivieren
-
tabNav.selectedIndex = o.tab;
-
-
// Browser-Title auswählen, auch Fallunterscheidung möglich (z.B. if (tabNav.selectedIndex == 0) ...)
-
var browTitle:String = "Deep-Linking Einstieg";
-
-
// Browsertitle setzen
-
browserManager.setTitle(browTitle);
-
tabNav.validateNow();
-
parsing = false;
-
}
-
-
/* ::::::::::::::::::::::::::::::::::::::::: */
-
-
private function updateURL():void
-
{
-
if (!parsing)
-
callLater(actuallyUpdateURL);
-
}
-
-
/* ::::::::::::::::::::::::::::::::::::::::: */
-
-
private function actuallyUpdateURL():void
-
{
-
var o:Object = {};
-
var t:String = "";
-
-
if (tabNav.selectedIndex == 0) {
-
t = tab0.label;
-
}
-
else {
-
if (tabNav.selectedIndex == 1) {
-
t = tab1.label;
-
}
-
else t = tab2.label;
-
-
}
-
o.tab = tabNav.selectedIndex;
-
var s:String = URLUtil.objectToString(o);
-
browserManager.setFragment(s);
-
browserManager.setTitle(t);
-
}
-
-
]]>
-
</mx:Script>
-
<mx:TabNavigator id="tabNav" change="updateURL()" width="450" height="400" horizontalAlign="center">
-
<mx:Panel label="Tab #0" id="tab0">
-
<mx:Image source="@Embed('pic1.jpg')"/>
-
</mx:Panel>
-
<mx:Panel label="Tab #1" id="tab1">
-
<mx:Image source="@Embed('pic2.jpg')"/>
-
</mx:Panel>
-
<mx:Panel label="Tab #2" id="tab2">
-
<mx:Image source="@Embed('pic3.jpg')"/>
-
</mx:Panel>
-
-
</mx:TabNavigator>
-
</mx: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:
-
<!-- BEGIN DeepLinking required section -->
-
<link rel="stylesheet" type="text/css" href="deeplinking/deeplinking.css" />
-
<!-- END DeepLinking required section -->
-
-
<!-- BEGIN DeepLinking required section -->
-
<script src="deeplinking/deeplinking.js" language="javascript"></script>
-
<!-- END DeepLinking required section -->
Weitere Informationen finden sich im Adobe Labs: Flex 3: Deep Linking
Link: Beta-Version von Adobe Flex 3 (video-flash.de)
2 Kommentare zum Beitrag "Flex 3: Deep Linking"
Hier ein ergänzender Link zum Thema “Deep Linking”:
Deep-linking to frames in Flash websites
Hier eine weitere Möglichkeit zum Thema Deep Link:
Deep Linking mit SWFAddress 2.0
Schreibe einen Kommentar