欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

flex浏览器相关辅组类 博客分类: Flex/BlazeDS flex.browserurlprotocolcontext 

程序员文章站 2024-03-17 08:39:52
...
package util
{
	import flash.external.ExternalInterface;
	
	import mx.controls.Alert;
	import mx.core.Application;
	import mx.core.FlexGlobals;
	import mx.events.BrowserChangeEvent;
	import mx.managers.BrowserManager;
	import mx.managers.IBrowserManager;
	import mx.utils.URLUtil;

	/**
	 * A utility class related to browser
	 */ 
	public class BrowserUtil
	{
		private static var _singletonInstance:BrowserUtil;
		public var browserManager:IBrowserManager;
		public var fullURL:String;
		public var baseURL:String;
		public var fragment:String;
		public var protocol:String;
		public var port:int;
		public var serverName:String;
		public var isHttpsURL:Boolean;
		public var previousURL:String;
		public var contextRoot:String;
		
		public function BrowserUtil()
		{
			if(_singletonInstance!=null){
				throw new Error("Singleton class BrowserUtil has already been instantiated");
			}
			init();
		}
		
		private var _initalized:Boolean=false;
		private function init():void {
			if(!_initalized){
				browserManager = BrowserManager.getInstance();
				browserManager.addEventListener(BrowserChangeEvent.URL_CHANGE, urlChangedHandler);
				browserManager.addEventListener(BrowserChangeEvent.BROWSER_URL_CHANGE, browserURLChangeHandler);
				browserManager.addEventListener(BrowserChangeEvent.APPLICATION_URL_CHANGE,applicationURLChangeHandler);
				parseURL(getPageURL());
				browserManager.init("", "Welcome");
				browserManager.setTitle("Welcome");
				_initalized=true;
			}
		}
		
		private function getPageURL():String{
			var url:String=browserManager.url;
			if(url==null || url.length==0){
				url=getTopLevelApplication().url;
			}
			if(url==null || url.length==0){
				url=ExternalInterface.call("window.location.href.toString");
			}
			return url;
		}
		
		private function getTopLevelApplication():Object{
			//flex 3 use Application.application, flex 4 changed to
			return FlexGlobals.topLevelApplication;
		}
		
		private function browserURLChangeHandler(e:BrowserChangeEvent):void{
			//Alert.show("BrowserChangeEvent.BROWSER_URL_CHANGE triggered");
		}
		
		private function applicationURLChangeHandler(e:BrowserChangeEvent):void{
			//Alert.show("BrowserChangeEvent.APPLICATION_URL_CHANGE triggered");
		}
		
		public static function getInstance():BrowserUtil{
			if(_singletonInstance==null){
				_singletonInstance=new BrowserUtil();
			}
			return _singletonInstance;
		}
		
		public function updateTitle(title:String):void {
			browserManager.setTitle(title);
		}
		
		private function updateURL(fragment:String):void {
			browserManager.setFragment(fragment);
		}
		
		private function parseURL(url:String):void{
			baseURL = browserManager.base;
			fragment = browserManager.fragment;                
			fullURL = URLUtil.getFullURL(url, url);
			port = URLUtil.getPort(url);
			protocol = URLUtil.getProtocol(url);
			serverName = URLUtil.getServerName(url);
			isHttpsURL = URLUtil.isHttpsURL(url); 
			contextRoot=getContextRoot(fullURL);
		}
		
		private function urlChangedHandler(e:BrowserChangeEvent):void {
			var url:String = browserManager.url;
			parseURL(url);
			previousURL = e.lastURL;
		}
		
		/**
		 * Returns the context root of the application embedding this file. 
		 * Given http://localhost:8080/myapp/index.html, "myapp" will be returnd.
		 */ 
		private function getContextRoot(url:String):String{
			var firstDoubleSlash:int=url.indexOf("//");
			//find the first single slash, start 2 after firstDoubleSlash, note indexOf is 0-based method, so add 2
			var firstSingleSlash:int=url.indexOf("/",firstDoubleSlash+2)+1;
			var secondSingleSlash:int=url.indexOf("/",firstSingleSlash);
			return url.substring(firstSingleSlash,secondSingleSlash);
		}
	}
}