加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex BrowserManager,HistoryManager解析

发布时间:2020-12-15 01:30:44 所属栏目:百科 来源:网络整理
导读:Flex?BrowserManager,HistoryManager解析 (2011-02-18 16:38:21) 转载 标签: flex flash browsermanager historymanager it 分类: Flex flex这两个类是用来处理和浏览器相关对象的交互,类似HTML的history,location对象,以下是详细解析: HistoryManager功

Flex?BrowserManager,HistoryManager解析

(2011-02-18 16:38:21)

转载
标签:

flex

flash

browsermanager

historymanager

it

分类: Flex

flex这两个类是用来处理和浏览器相关对象的交互,类似HTML的history,location对象,以下是详细解析:

HistoryManager功能在Flex项目中是默认打开的,比如在使用Accordion 和 TabNavigator组件时,在不同区域切换时,Flex会自动记录下各个状态,我们可以通过点击浏览器的“前进”和“后退”按钮来前进和倒退,在你切换这些组件的区域时,Flex会自动你在网页链接的后面加写参数,以便记录当前页面的状态。
? 默认情况下HistoryManager的功能是打开的,你可以通过设置各个组件或Application的historyManagementEnabled属性为false(默认为TRUE)来关闭此功能。
? 这些都没什么好讲的。关键是怎么在一些普通组建上使用HistoryManager功能,默认的navigator container组建都是支持该功能的。要使一些普通组建也支持此功能,必须:
? 1.实现mx.managers.IHistoryManagerClient接口。
? 2.用HistoryManager'的register()方法为组建注册。
? 3.当组件状态改变时保存组件的状态。
? 4.通过实施IHistoryManagerClient的saveState() 和 loadState()方法来保存和读取组件状态。

?
?拿CheckBox为例:

?
<?xml version="1.0"?>
<mx:CheckBox
? xmlns:mx="http://www.adobe.com/2006/mxml"
? label="Check me"
??
? implements="mx.managers.IHistoryManagerClient" //关键步骤1,实现接口
? creationComplete="mx.managers.HistoryManager.register(this);"//关键步骤2,注册组件
? change="boxChanged(event)"//关键步骤3,当组件发生变化时保存状态
>

? <mx:Script><![CDATA[
? import mx.managers.HistoryManager;
? //实施IHistoryManagerClient的saveState()方法保存状态
? public function saveState():Object {
return {selected:selected};
? }
? //实施IHistoryManagerClient的loadState()方法读取状态
public function loadState(state:Object):void {
var newState:Boolean = state;

if (newState != selected) {
? selected = newState;
} else {
? if (newState) {
? ;
? } else {
? selected = true;
? }
}
? }
??
? // 保存状态
? private function boxChanged(e:Event):void {
HistoryManager.save();
? }?
? ]]></mx:Script>

</mx:CheckBox>
? 注意:如果你把实现HistoryManager功能的组件放到module中,再在主程序中调用,那么HistoryManager功能是没用的。
? 麻雀虽小,五脏俱全。上面例子就是如何让任意组件实现HistoryManager的典型案例。点击浏览器的“前进”和“后退”来恢复上个或下个状态。

?

?可以通过BrowserManager类的getInstance()方法来获得其一个实施了IBrowserManager接口的实例。这样就可以访问其setTitle()和setFragment()方法和属性了。下面我就来介绍一下BrowserManager类的一些属性和方法。
?

方法:
? 1.init(fragment,title)
? 该方法可以定义默认的链接参数和网页标题。一般在初始化时用到。例如:
? browserManager.init("","Test Deep Linking");定义了参数为空,标题为Test Deep Linking的网页。
? 2.setTitle(title)
? 该方法用来设置网页标题。例如:
? browserManager.setTitle("The New Title") 设置网页标题为“The New Title”。
? 3.setFragment(fragment)
?该方法用来设置网页参数。例如:
?browserManager.setFragment("id=3") 设置参数“id=3”。
?

属性:


? 1.url
? browserManager.url获得页面完整链接。
? 2.base
? browserManager.base获得页面基地址。
? 3.fragment
? browserManager.fragment获得页面链接#后的参数。
? 4.lastURL
? browserManager.lastURL获得上一个页面链接——IE6我获得是失败的,火狐正确。大家可以自己试试。

? 注意:上面的browserManager便是BrowserManager类的一个实例。实例化过程如下:
? import mx.events.BrowserChangeEvent;
? import mx.managers.IBrowserManager;
? import mx.managers.BrowserManager;
? private var browserManager:IBrowserManager;
? private function initApp():void {
? browserManager = BrowserManager.getInstance();
? browserManager.addEventListener(BrowserChangeEvent.BROWSER_URL_CHANGE,parseURL);
? browserManager.init("","Test Deep Linking");
}

?

?如何分析URl


? 可以用URLUtil类方便的分析Url
? 类路径mx.utils.URLUtil,例如链接:http://127.0.0.1/index.html#a=3&b=1
? var o:Object = URLUtil.stringToObject(browserManager.fragment,"&");
? trace(o.a,o.b)
? 反过来设置地址栏链接:
? o.a=5;o.b=7;
? var s:String = URLUtil.objectToString(o,"&");
? browserManager.setFragment(s);
? 注意:如果 URLUtil.objectToString()方法第二个参数为空,那么默认的参数分隔符为";"号。
?
? BrowserManager类的事件
? BrowserManager类有三种事件:
? 1.applicationURLChange事件;
? 当在程序执行时调用setFragment()等方法改变URL时派发此事件。
? 2.browserURLChange事件;
? 当手动改变浏览器链接或点击“前进”或“后退”时派发此事件。
? 3.urlChange事件;
? applicationURLChange事件或browserURLChange事件派发时,都将触发该事件。

?

获得链接信息


? 可以通过BrowserManager类的属性和URLUtil的一些方法来获得链接信息,例如:
? var url:String = browserManager.url;
? baseURL = browserManager.base;
? fragment = browserManager.fragment;?
? previousURL = e.lastURL;?

? fullURL = mx.utils.URLUtil.getFullURL(url,url);? port = mx.utils.URLUtil.getPort(url);? protocol = mx.utils.URLUtil.getProtocol(url);? serverName = mx.utils.URLUtil.getServerName(url);? isSecure = mx.utils.URLUtil.isHttpsurl(/url);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读