Flex Deep Link(深链接)应用
最近做游戏的时候,发现退出登陆时URL上会自动加上一个“#”字符,很奇怪,Google+Baidu无数次都没有找到答案。今天无意间看到几个
群友在说通过“BrowserManager”获取URL,于是仔细查看了API,又发现了“HistoryManager”,这个问题终于明白了。
我们通常看的Web页面
可以通过浏览器的“前进”“后退”来查看刚才看过的页面,同样,嵌入的页面中的flash也可以实现这样的功能。方法是通过
HistoryManageer类和BrowserManager类两种方法来实现。HistoryManageer类主要是用在Flex2,Flex3
后很少用了。待会我将分别介绍这两种方法。
回到刚才说URL上自动加“#”号的问题:原因是Application
默认historyManagementEnabled属性是ture,也就是说HistoryManageer类功能自动开启
了,Application
里面通过程序控制addChild或removeChild任何组件所导致的变化,将会记录在flash的history中,导致重写url,加上“#”
字符。故有了这个奇怪的“#”号。在Flex3中,HistoryManager功能在Flex项目中默认打开的还有Accordion 和
TabNavigator组件。对于没有默认打开该功能的组件,如果要实现该功能,则需要另外注册。下面引用两片文章加以说明:
对于一个网站来说,其是有若干个网页组成的。而各个网页之间的链接叫做超链接。链接成为网页和网页之间的桥梁。那么,对于一个Flash整站来
说,有没有一个办法来实现Flash各页面(更恰当的说是各功能模块)之间的链接呢。比如,我想在浏览器中输入一个链接便可以链到Flash整站中的一页
—一个功能模块,而不是每次都要通过Flash整站的第一个页面的功能导航进入。把Flash的各个功能块页面化,那么我们该怎么实现呢。到底能不能实现
呢?
答案是肯定的,通过Flex Deep Link 便能实现上述功能。
第一,Deep Link 简介。
Deep Link其实也是依赖Flash和浏览器的交互来实现的,通过获取链接地址中#后面的参数来实现页面标记,当你在Flex
Bulid3发布一个项目时,其会自动你发布的目录生成一个名为History的文件夹,里面有
History.js,HistoryFrame.html,history.css这三个文件,可见Deep
Link也是通过和浏览器交互来实现的.如果浏览器不支持JavaScript或者禁用JavaScript,那么Deep LinK肯定是不能用的。
对于Deep Link应用,最重要的就是学会应用BrowserManager和HistoryMa
相关文档:
几种导航选项卡
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:ButtonBar dataProvider="myPages">
</mx:ButtonBar>
<mx:ToggleButtonBar dataProvider="myPages">
</mx:ToggleButto ......
1.弹出新窗口
Flex通过PopUpManager类来实现弹出新窗口:
先设置好要弹出窗口的页面,然后在主窗口中先new出弹出窗口的对象,然后可以对弹出窗口的属性进行
赋值,
var genggai : GengGaiWindow = new GengGaiWindow();
genggai.logId = adg.selectedI ......
关于states
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Script>
<![CDATA[
import mx.effects.easing.Bounce;
]]>
</mx:Script>
<mx:states>
<mx:State name="bookDetails" ......
public function submit():void{
//要请求的URL
var request:URLRequest = new URLRequest("
http://localhost:8086/test.do
") ;
var load:URLLoader = new URLLoader() ;
//URL参数
& ......
现在我们先看看代码,下面的代码装在creationComplete事件中调用init()来启动全屏.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
creationComplete="init()"
>
<mx:Scri ......