Obtener parametros de la URL en Adobe Flex (HTML Wrapper)
Después de ver varias búsquedas en el Google Analytics preguntando sobre este tema me he animado a postear.
En este articulo os voy a proponer dos opciones para obtener los parámetros que viajan en una URL. En Flex existen varias formas de pasar parámetros a una aplicación mediante la URL, ya sea mediante variables flashVars o añadiendo los parámetros como si fuese un get (p.e for example, MyApp.swf?value1=x&value2=y).
En este post, lo que quiero mostrar son dos soluciones para cuando nuestro swf este embebido dentro del wrapper HTML.
La primera solución y la que yo utilizo, es la propuesta por Abdul Qabiz. Es una clase ActionScript la cual echa mano de la clase ExternalInterface para obtener la URL mediante JavaScript, una vez recuperada realiza un parseo para obtener los pares variable-valor. Esta es la parte central del código se basa en la clase ExternalInterface para obtener los parametros mediante JS:
private function readQueryString():void
{
_params = {};
try
{
_all = ExternalInterface.call("window.location.href.toString");
_queryString = ExternalInterface.call("window.location.search.substring", 1);
if(_queryString)
{
var params:Array = _queryString.split('&');
var _length:uint = params.length;
for (var i:uint=0,index:int=-1; i < _length; i++)
{
var kvPair:String = params[i];
if((index = kvPair.indexOf("=")) > 0)
{
var key:String = kvPair.substring(0,index);
var value:String = kvPair.substring(index+1);
_params[key] = value;
}
}
}
}catch(e:Error) { trace("Some error occured. ExternalInterface doesn't work in Standalone player."); }
}
La segunda solución es la ofrecida por Adobe. A mi personalmente no me gusta demasiado, ya que para poder utilizar esta solución hay que introducir el caracter # antes de los parámetros de la URL, por ejemplo:
http://www.mydomain.com/MyApp.html#firstName=Nick&lastName=Danger
Esto es debido a que utiliza la clase BrowserManager (que nos permite realizar diferentes tareas con la URL) junto con la clase URLUtil que nos permite parsea la URL y pasarlo a un Object. En el siguiente código se puede ver más claramente.
private function init(e:Event):void {
bm = BrowserManager.getInstance();
bm.init("", "Welcome!");
/* The following code will parse a URL that passes firstName and lastName as
query string parameters after the "#" sign; for example:
http://www.mydomain.com/MyApp.html#firstName=Nick&lastName=Danger */
var o:Object = URLUtil.stringToObject(bm.fragment, "&");
fName = o.firstName;
lName = o.lastName;
}
Supongo que conoceréis más maneras de acceder a los parámetros de la URL desde Flex, aquàpodéis descargar esta dos soluciones en un proyecto Eclipse por si os apetece probarlo.
Salu2. Héctor.


