Muchos de nosotros, aveces, nos vemos obligados de abrir un popup desde Flash y para eso utilizamos ExternalInterface que ya vimos en un tutorial aquí en Cristalab. Sin embargo, para algunas personas no familiarizadas con el código, se les hace un mundo cuando comparan esa forma con el clásico método getURL de ActionScript 2.0. De hecho zguillez hizo un tip en AS2.
Para eso hice una pequeña clase que nos ayudará a resolver este dilema utilizando navigateToURL, pero déjenme insistir en utilizar ExternalInterface.
Para eso creo mis variables por default, donde declaro la url a abrir, el ancho y alto, el título de la ventana, si será resize y en que ventana abrirá
Código :
private var _url:String = "http://www.cristalab.com"; private var _width:Number= 400; private var _height:Number= 300; private var _title:String = "title"; private var _resize:String = "yes"; private var _window:String = "_blank";
Ahora crearé un método que llamará a un URLRequest, donde definiremos el javascript que abrirá el popup
Código :
public function openWindow(newUrl:String = null):void{
if(newUrl)
this.url = newUrl;
var _urlRequest:URLRequest=new URLRequest();
_urlRequest.url="javascript:window.open('"+url+"','"+title+"','width="+width+",height="+height+", resizable="+resize+"');newWindow.focus(); void(0);";
navigateToURL(_urlRequest,_window);
}
Aquí el código completo de la clase:
Código :
package com.cristalab.utils
{
import flash.net.URLRequest;
import flash.net.navigateToURL;
public class PopUp
{
private var _url:String = "http://www.cristalab.com";
private var _width:Number= 400;
private var _height:Number= 300;
private var _title:String = "title";
private var _resize:String = "yes";
private var _window:String = "_blank";
public function PopUp()
{
}
public function openWindow(newUrl:String = null):void{
if(newUrl)
this.url = newUrl;
var _urlRequest:URLRequest=new URLRequest();
_urlRequest.url="javascript:window.open('"+url+"','"+title+"','width="+width+",height="+height+", resizable="+resize+"');newWindow.focus(); void(0);";
navigateToURL(_urlRequest,_window);
}
public function set url(val:String):void
{
_url = val;
}
public function get url():String
{
return _url;
}
public function set width(val:Number):void
{
_width = val;
}
public function get width():Number
{
return _width;
}
public function set height(val:Number):void
{
_height = val;
}
public function get height():Number
{
return _height;
}
public function set title(val:String):void
{
_title = val;
}
public function get title():String
{
return _title;
}
public function set resize(val:String):void
{
_resize = val;
}
public function get resize():String
{
return _resize;
}
public function set window(val:String):void
{
_window = val;
}
public function get window():String
{
return _window;
}
}
}
Para utilizar esta clase, hice un ejemplo en un FLA simple:
Código :
import com.cristalab.utils.PopUp;
var t:PopUp = new PopUp();
btn1.addEventListener(MouseEvent.CLICK, popUpNormal);
btn2.addEventListener(MouseEvent.CLICK, popUpEditado);
function popUpNormal(e:MouseEvent):void {
var ir:String;
ir="http://www.cristalab.com/tutoriales/";
t.openWindow(ir);
}
function popUpEditado(e:MouseEvent):void {
t.url="http://www.google.com";
t.title="Estamos en Google";
t.width=640;
t.height=480;
t.resize="yes";
t.window="_self";
t.openWindow();
}
El método popUpNormal, abre un popup con los valores por default de la clase.
El método popUpEditado, permite editar los parámetros a tu gusto
Espero les sirva.

Por Guti el 29 de Junio de 2009
Saludos.
Guti (http://guti.bitacoras.com).
osea veo que colocaste todas las variables en private!! cuando en realidad es mas corto y simple poniéndolas en Public
(pregunto para saber) entiendo que "es la manera correcta" pero tiene alguna ventaja para clases simples?..
Código :
package com.cristalab.utils { import flash.net.URLRequest; import flash.net.navigateToURL; public class PopUp { public var _url:String = "http://www.cristalab.com"; public var _width:Number= 400; public var _height:Number= 300; public var _title:String = "title"; public var _resize:String = "yes"; public var _window:String = "_blank"; public function PopUp(){ } public function openWindow(newUrl:String = null):void{ if(newUrl) this.url = newUrl; var _urlRequest:URLRequest=new URLRequest(); _urlRequest.url="javascript:window.open('"+url+"','"+title+"','width="+width+",height="+height+", resizable="+resize+"');newWindow.focus(); void(0);"; navigateToURL(_urlRequest,_window); } }y la implementación la usas como si estuvieran en public
(Curiosamente y en eso no entiendo, te debería de tirar error a vos que las pusiste en private)
Código :
var t:PopUp = new PopUp(); function popUpEditado(e:MouseEvent):void { t.url="http://www.google.com"; t.title="Estamos en Google"; t.width=640; t.height=480; t.resize="yes"; t.window="_self"; t.openWindow(); }Muy bueno el ejemplo igualmente.
Yo también tengo una clase para lo mismo
Clase Phoxer.Navigator
Pero si estas 100% seguro que usarás entero, iría int. Y aquí lo dejo por si las dudas:
int: 24-26ms
Number: 31-36ms
uint: 105-225ms
@phoxer: Simple costumbre y buenas prácticas. solo eso. Y no tira error porque estoy usando: set url(val:String)
eldervaz :
haaa copado, no sabia que también se podía de esa forma, yo casi siempre cuando son clases simples uso variables publicas, por eso mi pregunta
gracias..
Por nicoluca el 14 de Agosto de 2009
http://www.dieroboter.com/jQPOOOP
or
http://code.google.com/p/pluginjquery
nico-blog :
http://www.dieroboter.com/jQPOOOP
or
http://code.google.com/p/pluginjquery
Cómo abrir una ventana PopUp en ActionScript 3
Por Alvaro Daniel el 21 de Agosto de 2009
El codigo ...
package com.cristalab.utils
{
import flash.net.URLRequest;
import flash.net.navigateToURL;
public class PopUp
{
private var _url:String = "http://www.cristalab.com";
private var _width:Number= 400;
private var _height:Number= 300;
private var _title:String = "title";
private var _resize:String = "yes";
private var _wi ....
Va en un archivo .as aparte??? y luego se llama con import com.cristalab.utils.PopUp; ???
o todo el codigo va dentro del flash que uno esta usando??
GRACIAS
diego2008kat-blog :
o todo el codigo va dentro del flash que uno esta usando??
El código va dentro de un archivo de texto que se llame "PopUp.as", dentro de una ruta de carpetas que sea "com/cristalab/utils". Eso, o le cambias al package que quieras.
Por mpickelny el 18 de Mayo de 2010
en el caso de que nuestro archivo PopUp.as este en el directorio raiz de nuestro sitio ?gracias