Discussion:
Javascript desde Flash
(demasiado antiguo para responder)
Federico
2008-07-24 03:10:00 UTC
Permalink
Hola:

Estoy usando javascript desde mi Flash 8 P. La instrucción es simple y todos
sabemos lo que hace:

getURL("JavaScript:ventana=window.open('pagina.html')");


Este código lo coloco en el evento Press o Release de un botón.
El asunto es que este código tiene un comportamiento en IE y otro, por
ejemplo, en SAFARI. El comportamiento que espero es el que se produce en
SAFARI. El navegante presiona el botón y se abre la ventana nueva pero el
Flash en el que se encuentra el botón sigue ahí.
En cambio, en IE, luego de presionar el botón, además de abrirse la ventana
nueva, la ventana donde se encuentra el botón carga una página en blanco que
sólo dice [object]
Esto es un misterio y no sé cómo resolverlo.
Cualquier comentario puede ayudarme.
Muchas gracias.



Federico
Juan Muro
2008-07-27 11:14:25 UTC
Permalink
Hola Federico:
A la función de javascript le debes meter un void para que no retorne datos
de objeto, tal que, por ejmeplo, así:
on (release) {
getURL
("javascript:void(window.open('../HTML/pop_up2.htm','popup','toolbar=no,menubar=no,scrollbars=no,resizable=no,width=400,height=550'))");
}
Salu2
`8¬]
Juan Muro
Post by Federico
Estoy usando javascript desde mi Flash 8 P. La instrucción es simple y
getURL("JavaScript:ventana=window.open('pagina.html')");
Este código lo coloco en el evento Press o Release de un botón.
El asunto es que este código tiene un comportamiento en IE y otro, por
ejemplo, en SAFARI. El comportamiento que espero es el que se produce en
SAFARI. El navegante presiona el botón y se abre la ventana nueva pero el
Flash en el que se encuentra el botón sigue ahí.
En cambio, en IE, luego de presionar el botón, además de abrirse la
ventana nueva, la ventana donde se encuentra el botón carga una página en
blanco que sólo dice [object]
Esto es un misterio y no sé cómo resolverlo.
Cualquier comentario puede ayudarme.
Muchas gracias.
Federico
Federico
2008-07-27 19:34:12 UTC
Permalink
Juan:

Mil gracias, justo ayer, después de dos o tres semanas de investigar,
encontré a alguien en Internet dando el mismo consejo que vos y así pude
resolver el problema. Que difícil es programar no?
Saludos.


Federico
Post by Juan Muro
A la función de javascript le debes meter un void para que no retorne
on (release) {
getURL
("javascript:void(window.open('../HTML/pop_up2.htm','popup','toolbar=no,menubar=no,scrollbars=no,resizable=no,width=400,height=550'))");
}
Salu2
`8¬]
Juan Muro
Post by Federico
Estoy usando javascript desde mi Flash 8 P. La instrucción es simple y
getURL("JavaScript:ventana=window.open('pagina.html')");
Este código lo coloco en el evento Press o Release de un botón.
El asunto es que este código tiene un comportamiento en IE y otro, por
ejemplo, en SAFARI. El comportamiento que espero es el que se produce en
SAFARI. El navegante presiona el botón y se abre la ventana nueva pero el
Flash en el que se encuentra el botón sigue ahí.
En cambio, en IE, luego de presionar el botón, además de abrirse la
ventana nueva, la ventana donde se encuentra el botón carga una página en
blanco que sólo dice [object]
Esto es un misterio y no sé cómo resolverlo.
Cualquier comentario puede ayudarme.
Muchas gracias.
Federico
Juan Muro
2008-07-28 20:32:23 UTC
Permalink
No Federico, no es difícil, solo hay que estudiar. El void es la orden de no
retorno en muchos lenguajes de programación, no solo en java y javascript.
Con ella le indicamos a la función que no tiene que devolvernos un valor de
datos. Lo extraño del caso es que la bien-interprete Microsoft, que siempre
se ha distinguido por su programación farragosa y su falta de ortodoxia en
las sintaxis de los lenguajes, y sin embargo sí que cuele en Mozilla y
otros, que respetan más los estándares.
Ya ves que nada es verdad ni es mentira, todo se ve según el color del
cristal con que se mira.
Salu2
`8¬]
Juan Muro
Post by Federico
Mil gracias, justo ayer, después de dos o tres semanas de investigar,
encontré a alguien en Internet dando el mismo consejo que vos y así pude
resolver el problema. Que difícil es programar no?
Saludos.
Federico
Post by Juan Muro
A la función de javascript le debes meter un void para que no retorne
on (release) {
getURL
("javascript:void(window.open('../HTML/pop_up2.htm','popup','toolbar=no,menubar=no,scrollbars=no,resizable=no,width=400,height=550'))");
}
Salu2
`8¬]
Juan Muro
Post by Federico
Estoy usando javascript desde mi Flash 8 P. La instrucción es simple y
getURL("JavaScript:ventana=window.open('pagina.html')");
Este código lo coloco en el evento Press o Release de un botón.
El asunto es que este código tiene un comportamiento en IE y otro, por
ejemplo, en SAFARI. El comportamiento que espero es el que se produce en
SAFARI. El navegante presiona el botón y se abre la ventana nueva pero
el Flash en el que se encuentra el botón sigue ahí.
En cambio, en IE, luego de presionar el botón, además de abrirse la
ventana nueva, la ventana donde se encuentra el botón carga una página
en blanco que sólo dice [object]
Esto es un misterio y no sé cómo resolverlo.
Cualquier comentario puede ayudarme.
Muchas gracias.
Federico
Federico
2008-07-29 01:10:08 UTC
Permalink
Estimado Juan:

Te aseguro que estudio bastante, pero insisto en mi teoría de que el mundo
de la programación es sumamente arduo. He preguntado en foros dónde hay
personas que saben mucho más que yo y no supieron qué decirme.
Conozco lo que hace la instrucción VOID, mi pregunta es, y qué importa lo
que hace en este caso? Esa instrucción indica que la función no retorna un
valor. Me pregunto si la gente que hizo Flash y la que hizo IE no lo saben,
si la función no retorna un valor no me explico porque tengo que utilizar
una instrucción que indique eso. Me parece que es Mozilla el que funciona de
manera correcta.
Te mando un saludo.


Federico
Post by Juan Muro
No Federico, no es difícil, solo hay que estudiar. El void es la orden de
no retorno en muchos lenguajes de programación, no solo en java y
javascript. Con ella le indicamos a la función que no tiene que
devolvernos un valor de datos. Lo extraño del caso es que la
bien-interprete Microsoft, que siempre se ha distinguido por su
programación farragosa y su falta de ortodoxia en las sintaxis de los
lenguajes, y sin embargo sí que cuele en Mozilla y otros, que respetan más
los estándares.
Ya ves que nada es verdad ni es mentira, todo se ve según el color del
cristal con que se mira.
Salu2
`8¬]
Juan Muro
Post by Federico
Mil gracias, justo ayer, después de dos o tres semanas de investigar,
encontré a alguien en Internet dando el mismo consejo que vos y así pude
resolver el problema. Que difícil es programar no?
Saludos.
Federico
Post by Juan Muro
A la función de javascript le debes meter un void para que no retorne
on (release) {
getURL
("javascript:void(window.open('../HTML/pop_up2.htm','popup','toolbar=no,menubar=no,scrollbars=no,resizable=no,width=400,height=550'))");
}
Salu2
`8¬]
Juan Muro
Post by Federico
Estoy usando javascript desde mi Flash 8 P. La instrucción es simple y
getURL("JavaScript:ventana=window.open('pagina.html')");
Este código lo coloco en el evento Press o Release de un botón.
El asunto es que este código tiene un comportamiento en IE y otro, por
ejemplo, en SAFARI. El comportamiento que espero es el que se produce
en SAFARI. El navegante presiona el botón y se abre la ventana nueva
pero el Flash en el que se encuentra el botón sigue ahí.
En cambio, en IE, luego de presionar el botón, además de abrirse la
ventana nueva, la ventana donde se encuentra el botón carga una página
en blanco que sólo dice [object]
Esto es un misterio y no sé cómo resolverlo.
Cualquier comentario puede ayudarme.
Muchas gracias.
Federico
Juan Muro
2008-07-29 11:00:56 UTC
Permalink
Ante todo mis excusas, Federico: Podría interpretarse por el comienzo de mi
anterior mensaje que te reprocho no estudiar, lo que nunca fue mi intención.
Pretendía con ello decir que este es un problema bastante básico, pero mis
palabras no fueron las correctas. Repito, mil perdones.
Precísamente porque la instrucción nativa void indica que la función no
retorna un valor, es por lo que es adecuada en este caso. De otra manera el
server puede (y debe) interpretar que existe un objeto -en este caso un
objeto ventana- esperando respuesta de la funcion.
No es que los ingenieros programadores que hicieron Flash no supieran de
esto (no es cosa de flash en este caso sino del javascript al que se llama
desde una función de Flash), sino de la manera de programar:
A la manera ortodoxa, por decirlo así, de utilizar los lenguajes de
programación le llamamos 'strict data typing', o en mal castellano 'tipado
estricto de datos'. Mediante esta manera los programadores nos obligamos a
definir en las funciones el tipo de datos que manejamos y los retornos de
las funciones, so pena de obtener en los depuradores (debugers) de los
compiladores de código, unos errores que impiden la compilación. ¿Para qué
asumimos estas nuevas obligaciones?, pues precisamente para detectar y poder
evitar errores como el que comentamos.
Pero algunos lenguajes de programación comenzaron su andadura sin tener
presente los estándares de programación, por lo que la implementación del
strict data typing era imposible. Action Script, por ejemplo, solo lo
consiguió a partir de la versión 2 del lenguaje -con Macromedia Flash 8- y
muchos otros andan aún en ello.
Lo que sucedió durante la elaboración de IE es algo tan confuso, y repleto
de injerencias empresariales que nada tienen que ver con los lenguajes de
programación, que sería demasiado largo de contar. No obstante desconocemos
el código C++ en el que está implementado IE, ya que forma parte del sistema
operativo windows, con el que se haya profusamente entrelazado, y no solo es
secreto y privado sino secretista y privativo.
Mozilla Firefox interpreta bien tus intenciones de abrir una nueva ventana,
aunque hayas 'escrito mal' (de manera poco ortodoxa, quiero decir) la
instrucción. Esto sucede porque, hartos de encontrarse con este problema,
terminan por asumirlo e implementar en su navegador el código que interpreta
tu órden de la manera más habitual, pero ello no significa que sea Mozilla
el que funciona de la manera correcta (de hecho es IE el que lo hace), sino
que Mozilla ha tapado este parche tan frecuente y ha asumido con ello una
mala práxis de algunos programadores.
Salu2
`8¬]
Juan Muro
Post by Federico
Te aseguro que estudio bastante, pero insisto en mi teoría de que el mundo
de la programación es sumamente arduo. He preguntado en foros dónde hay
personas que saben mucho más que yo y no supieron qué decirme.
Conozco lo que hace la instrucción VOID, mi pregunta es, y qué importa lo
que hace en este caso? Esa instrucción indica que la función no retorna un
valor. Me pregunto si la gente que hizo Flash y la que hizo IE no lo
saben, si la función no retorna un valor no me explico porque tengo que
utilizar una instrucción que indique eso. Me parece que es Mozilla el que
funciona de manera correcta.
Te mando un saludo.
Federico
Post by Juan Muro
No Federico, no es difícil, solo hay que estudiar. El void es la orden de
no retorno en muchos lenguajes de programación, no solo en java y
javascript. Con ella le indicamos a la función que no tiene que
devolvernos un valor de datos. Lo extraño del caso es que la
bien-interprete Microsoft, que siempre se ha distinguido por su
programación farragosa y su falta de ortodoxia en las sintaxis de los
lenguajes, y sin embargo sí que cuele en Mozilla y otros, que respetan
más los estándares.
Ya ves que nada es verdad ni es mentira, todo se ve según el color del
cristal con que se mira.
Salu2
`8¬]
Juan Muro
Post by Federico
Mil gracias, justo ayer, después de dos o tres semanas de investigar,
encontré a alguien en Internet dando el mismo consejo que vos y así pude
resolver el problema. Que difícil es programar no?
Saludos.
Federico
Post by Juan Muro
A la función de javascript le debes meter un void para que no retorne
on (release) {
getURL
("javascript:void(window.open('../HTML/pop_up2.htm','popup','toolbar=no,menubar=no,scrollbars=no,resizable=no,width=400,height=550'))");
}
Salu2
`8¬]
Juan Muro
Post by Federico
Estoy usando javascript desde mi Flash 8 P. La instrucción es simple y
getURL("JavaScript:ventana=window.open('pagina.html')");
Este código lo coloco en el evento Press o Release de un botón.
El asunto es que este código tiene un comportamiento en IE y otro, por
ejemplo, en SAFARI. El comportamiento que espero es el que se produce
en SAFARI. El navegante presiona el botón y se abre la ventana nueva
pero el Flash en el que se encuentra el botón sigue ahí.
En cambio, en IE, luego de presionar el botón, además de abrirse la
ventana nueva, la ventana donde se encuentra el botón carga una página
en blanco que sólo dice [object]
Esto es un misterio y no sé cómo resolverlo.
Cualquier comentario puede ayudarme.
Muchas gracias.
Federico
Federico
2008-07-29 12:06:56 UTC
Permalink
Estimado Juan:

Muchas gracias por tu mensaje.
No soy un teórico de los lenguajes de programación y seguro que sé mucho
menos que vos en este aspecto y en varios otros. Pertenezco a una generación
reciente de programadores que no han pasado por la educación formal pero que
tienen ya, a pesar de eso, algunos logros en su trabajo.
Sin confrontar, te voy a efectuar algunas preguntas y voy a hacer algunos
comentarios. De acuerdo a lo que sé sobre lenguajes orientados a objetos,
void forma parte de la definición de una función, por ejemplo void mifuncion
(void) sería una función que no retorna un valor (tal vez deberíamos
llamarla procedimiento) y que tampoco recibe parámetros. Esto está muy
claro. El asunto es que void aparece en la definición de la función, pero
nunca he visto que se utilice para llamar a la función.
De hecho, si la función open del objeto window no retorna un valor en
javascript, te menciono que no he visto en ninguna página en la que se use
esta función que se lo haga con el operador VOID. Ahora bien, estamos de
acuerdo en que es un error desde el punto de vista de la sintaxis con que se
debe escribir la función y estamos de acuerdo en que varios vicios de los
programadores se han ido consolidando con el tiempo, no debería Flash
indicarme que hay un error en el modo en que coloco la función, sobre todo
considerando que esta no funcionará correctamente en algunos navegadores?
Estas son algunas de las preguntas que me hago.
Gracias por tu ayuda!!



Federico
Post by Juan Muro
Ante todo mis excusas, Federico: Podría interpretarse por el comienzo de
mi anterior mensaje que te reprocho no estudiar, lo que nunca fue mi
intención. Pretendía con ello decir que este es un problema bastante
básico, pero mis palabras no fueron las correctas. Repito, mil perdones.
Precísamente porque la instrucción nativa void indica que la función no
retorna un valor, es por lo que es adecuada en este caso. De otra manera
el server puede (y debe) interpretar que existe un objeto -en este caso un
objeto ventana- esperando respuesta de la funcion.
No es que los ingenieros programadores que hicieron Flash no supieran de
esto (no es cosa de flash en este caso sino del javascript al que se llama
A la manera ortodoxa, por decirlo así, de utilizar los lenguajes de
programación le llamamos 'strict data typing', o en mal castellano 'tipado
estricto de datos'. Mediante esta manera los programadores nos obligamos a
definir en las funciones el tipo de datos que manejamos y los retornos de
las funciones, so pena de obtener en los depuradores (debugers) de los
compiladores de código, unos errores que impiden la compilación. ¿Para qué
asumimos estas nuevas obligaciones?, pues precisamente para detectar y
poder evitar errores como el que comentamos.
Pero algunos lenguajes de programación comenzaron su andadura sin tener
presente los estándares de programación, por lo que la implementación del
strict data typing era imposible. Action Script, por ejemplo, solo lo
consiguió a partir de la versión 2 del lenguaje -con Macromedia Flash 8- y
muchos otros andan aún en ello.
Lo que sucedió durante la elaboración de IE es algo tan confuso, y repleto
de injerencias empresariales que nada tienen que ver con los lenguajes de
programación, que sería demasiado largo de contar. No obstante
desconocemos el código C++ en el que está implementado IE, ya que forma
parte del sistema operativo windows, con el que se haya profusamente
entrelazado, y no solo es secreto y privado sino secretista y privativo.
Mozilla Firefox interpreta bien tus intenciones de abrir una nueva
ventana, aunque hayas 'escrito mal' (de manera poco ortodoxa, quiero
decir) la instrucción. Esto sucede porque, hartos de encontrarse con este
problema, terminan por asumirlo e implementar en su navegador el código
que interpreta tu órden de la manera más habitual, pero ello no significa
que sea Mozilla el que funciona de la manera correcta (de hecho es IE el
que lo hace), sino que Mozilla ha tapado este parche tan frecuente y ha
asumido con ello una mala práxis de algunos programadores.
Salu2
`8¬]
Juan Muro
Post by Federico
Te aseguro que estudio bastante, pero insisto en mi teoría de que el
mundo de la programación es sumamente arduo. He preguntado en foros dónde
hay personas que saben mucho más que yo y no supieron qué decirme.
Conozco lo que hace la instrucción VOID, mi pregunta es, y qué importa lo
que hace en este caso? Esa instrucción indica que la función no retorna
un valor. Me pregunto si la gente que hizo Flash y la que hizo IE no lo
saben, si la función no retorna un valor no me explico porque tengo que
utilizar una instrucción que indique eso. Me parece que es Mozilla el que
funciona de manera correcta.
Te mando un saludo.
Federico
Post by Juan Muro
No Federico, no es difícil, solo hay que estudiar. El void es la orden
de no retorno en muchos lenguajes de programación, no solo en java y
javascript. Con ella le indicamos a la función que no tiene que
devolvernos un valor de datos. Lo extraño del caso es que la
bien-interprete Microsoft, que siempre se ha distinguido por su
programación farragosa y su falta de ortodoxia en las sintaxis de los
lenguajes, y sin embargo sí que cuele en Mozilla y otros, que respetan
más los estándares.
Ya ves que nada es verdad ni es mentira, todo se ve según el color del
cristal con que se mira.
Salu2
`8¬]
Juan Muro
Post by Federico
Mil gracias, justo ayer, después de dos o tres semanas de investigar,
encontré a alguien en Internet dando el mismo consejo que vos y así
pude resolver el problema. Que difícil es programar no?
Saludos.
Federico
Post by Juan Muro
A la función de javascript le debes meter un void para que no retorne
on (release) {
getURL
("javascript:void(window.open('../HTML/pop_up2.htm','popup','toolbar=no,menubar=no,scrollbars=no,resizable=no,width=400,height=550'))");
}
Salu2
`8¬]
Juan Muro
Post by Federico
Estoy usando javascript desde mi Flash 8 P. La instrucción es simple
getURL("JavaScript:ventana=window.open('pagina.html')");
Este código lo coloco en el evento Press o Release de un botón.
El asunto es que este código tiene un comportamiento en IE y otro,
por ejemplo, en SAFARI. El comportamiento que espero es el que se
produce en SAFARI. El navegante presiona el botón y se abre la
ventana nueva pero el Flash en el que se encuentra el botón sigue
ahí.
En cambio, en IE, luego de presionar el botón, además de abrirse la
ventana nueva, la ventana donde se encuentra el botón carga una
página en blanco que sólo dice [object]
Esto es un misterio y no sé cómo resolverlo.
Cualquier comentario puede ayudarme.
Muchas gracias.
Federico
Juan Muro
2008-07-29 17:05:48 UTC
Permalink
No Federico, no es así:
1º.- Java y Javascript (y en general toda la oop, programación orientada a
objetos), necesitan que un método declare el tipo de valor de dato que
devuelve. Si un método no devuelve ningún valor, entonces debe ser declarado
para devolver void (nulo).
2º.- Flash no debe decirte nada al respecto de lo que sucede dentro de otro
lenguaje, no olvides que Flash en un frontend (lo que ve el internauta) y
javascript es el backend (el mecanismo que hacen que funcione el html que
contiene el flash). Es decir javascript actúa en este caso como un lenguaje
intermedio más entre el html y el swf, de la misma manera que pueden actuar
otros lenguajes como php, asp, jsp, coldfusion, cgi's, perl's...en las
comunicaciones entre los swf y las bases de datos o los servidores, pero
Flash no interpreta lo que hacen estos lenguajes intermedios, solo
interpreta los resultados que le devuelven.
3º.- Void no forma nunca parte de la definición de ninguna función, es una
palabra reservada en todos los lenguajes (que conozco) que representa solo
un tipo de datos (nulo, vacío, inexistentes) de un método, por lo que jamás
podría usarse para invocar a una función.
4º.- En oop usamos void con la siguiente sintaxis:

public function mifuncion (): void {
trace ("Hola mundo lleno de mundos");
}
mifuncion();

De esta manera a la funcion pública llamada mifuncion le decimos que no debe
devolvernos datos, que se encargue solamente de ejecutar el trace que hay
entre sus llaves cuando sea invocada por el nombre de mifuncion.
Eso es todo.
Salu2
`8¬]
Juan Muro
Post by Federico
Muchas gracias por tu mensaje.
No soy un teórico de los lenguajes de programación y seguro que sé mucho
menos que vos en este aspecto y en varios otros. Pertenezco a una
generación reciente de programadores que no han pasado por la educación
formal pero que tienen ya, a pesar de eso, algunos logros en su trabajo.
Sin confrontar, te voy a efectuar algunas preguntas y voy a hacer algunos
comentarios. De acuerdo a lo que sé sobre lenguajes orientados a objetos,
void forma parte de la definición de una función, por ejemplo void
mifuncion (void) sería una función que no retorna un valor (tal vez
deberíamos llamarla procedimiento) y que tampoco recibe parámetros. Esto
está muy claro. El asunto es que void aparece en la definición de la
función, pero nunca he visto que se utilice para llamar a la función.
De hecho, si la función open del objeto window no retorna un valor en
javascript, te menciono que no he visto en ninguna página en la que se use
esta función que se lo haga con el operador VOID. Ahora bien, estamos de
acuerdo en que es un error desde el punto de vista de la sintaxis con que
se debe escribir la función y estamos de acuerdo en que varios vicios de
los programadores se han ido consolidando con el tiempo, no debería Flash
indicarme que hay un error en el modo en que coloco la función, sobre todo
considerando que esta no funcionará correctamente en algunos navegadores?
Estas son algunas de las preguntas que me hago.
Gracias por tu ayuda!!
Federico
Loading...