Foros del Web » Programando para Internet » Javascript »

Open en Javascript

Estas en el tema de Open en Javascript en el foro de Javascript en Foros del Web. Mi problema reside en que quiero redefinir el método windows.open para que no abra ninguna ventana cuando no recibe ningúna url y que se comporte ...
  #1 (permalink)  
Antiguo 01/08/2003, 07:05
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Open en Javascript

Mi problema reside en que quiero redefinir el método windows.open para que no abra ninguna ventana cuando no recibe ningúna url y que se comporte de la manera habitual cuando si la recibe.
¿Es esto posible?.
Gracias.

Última edición por Vice; 01/08/2003 a las 14:50
  #2 (permalink)  
Antiguo 01/08/2003, 09:01
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola Vice, Bienvenido a los foros :

Aunque no creo que se pueda, te voy a indicar una forma de "fabricar" algo así desde netscape (en explorer no sé hacerlo)...

Código PHP:
Window.prototype.abrir = function(paginaventanaparms)    {
    if (
pagina == ""alert("ponga parámetros");
    
open(paginaventanaparms);

Luego, en vez de poner "window.open", tienes que poner "window.abrir"... pero como te dije antes no funciona en explorer (El mito de que explorer es mejor, para mi punto de vista, tambalea... )

Otra forma menos compleja (o tal vez más "corriente") es hacer una función abrir, con esos parámetros, y desde ahí hacer el open...

function abrir(pag, ventana, parms) {
if (pag != "") window.open(pag, ventana, parms)
}

Espero que te sirva...

Saludos
}
  #3 (permalink)  
Antiguo 01/08/2003, 14:57
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Sonrisa

Gracias por tu pronta respuesta.

Pero, siempre hay un pero, , Lo que me dices no me resuelve el problema que quiero resolver, pues no me llega con definir una nueva función que haga lo mismo, sino que necesito "redefinir" la función open.
Una aproximación sería esto:
function open(URL, nombre, caracteristicas )
{
if ( URL.length > 1 )
{ window.open(URL,nombre,caracteristicas); }
else
{ return true; }
}
pero tiene el problema que es una función recursiva y da un error de desbordamiento de pila cuando se pasa una url. Funciona perfectamente como quiero cuando no hay ningún dato en el parámetro URL.

¿Cuál era la idea que tenía en mente?, pues ver si se podía hacer algo al estilo de la herencia de clases, en las cuales puedes redefinir un método en la clase hija, pero puedes, en cualquier momento, indicar que se reutilice el código original.
__________________
Estoy contagiado de Generación-I

Última edición por Vice; 01/08/2003 a las 15:02
  #4 (permalink)  
Antiguo 02/08/2003, 14:55
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
¿es posible hacerlo?
  #5 (permalink)  
Antiguo 03/08/2003, 11:47
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Bueno, siguiendo con la investigación de este tema he encontrado una forma para que me funciones sobre Netscape, pero no sobre Internet Explorer, ¿alguien me puede ayudar con esto?:

saveOpen=window.open;
function open(URL, nombre, caracteristicas )
{
if ( URL.length > 1 )
{ saveOpen(URL,nombre,caracteristicas); }
else
{ return true; }
}
  #6 (permalink)  
Antiguo 04/08/2003, 05:39
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2

¿Puede alguien decirme por qué las instrucciones anteriores funcionan diferente en Netscape y en IE?

Cuando se ejecuta en Netscape la ventana se abre normalmente aplicando los formatos, sin embargo cuando lo ejecuto sobre un IE aparece una ventana normal y corriente del explorador sin aplicar las características. Además, en IE, antes de la ventana, aparece un error de "stack overflow".
  #7 (permalink)  
Antiguo 04/08/2003, 08:20
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Hola Vice,

a ver si así te funciona



function open(URL, nombre, caracteristicas )
{
if ( URL != null )
{ window.open(URL,nombre,caracteristicas); }
}
  #8 (permalink)  
Antiguo 04/08/2003, 11:09
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

La parte netscape funciona correctamente, ya que realmente redefine "Window.open"

Código PHP:
var viejoOpen window.open;

if (!
document.all// netscape
Window.prototype.open = function(paginaventanaparms)    {
    if (
pagina == "") {alert("ponga parámetros"); return;}
    
viejoOpen(paginaventanaparms);
}
else 
// explorer
function open(paginaventanaparms)    {
    if (
pagina == "")     {alert("ponga parámetros"); return;}
    
viejoOpen(paginaventanaparms);

Claro que tendrías que quitar el alert ya que lo puse como "chivato"...

Para explorer, también tengo problemas... probé también lo que puso tunait (¡Hola! ), y tampoco funcionó.

Tal vez sea mejor hacer el chequeo antes de llamar a la función.
Es curioso que cada vez veo más cosas funcionando mejor en netscape que en explorer

Saludos
  #9 (permalink)  
Antiguo 06/08/2003, 01:45
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Gracias .
Si esto es lo mejor que se puede hacer por culpa del IE , no queda más remedio que conformarse .
  #10 (permalink)  
Antiguo 08/08/2003, 01:31
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Al final he conseguido que funcione, con algo de ayuda, como quería. Os pongo como queda el asunto para quien le interese:

Código PHP:
function myopen(URLnombrecaracteristicas  )
{
   if ( 
URL.length )
   { 
saveOpen(URL,nombre,caracteristicas); }
   else
   { return 
true; }
}

saveOpen window.open;
window.open=myopen
__________________
Estoy contagiado de Generación-I
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:35.