Flex BrowserManager,HistoryManager解析

Flex BrowserManager,HistoryManager解析

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

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);

發佈了46 篇原創文章 · 獲贊 3 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章