Foros del Web » Programando para Internet » Javascript »

Problema con eventos en iframe firefox

Estas en el tema de Problema con eventos en iframe firefox en el foro de Javascript en Foros del Web. Hola, Estoy creando un iframe (document.createElement) y le quiero poner algunos eventos como: - onmouseup (es un iframe editable) - onmousedown - onfocus - onkeyup ...
  #1 (permalink)  
Antiguo 05/02/2011, 20:59
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Problema con eventos en iframe firefox

Hola,
Estoy creando un iframe (document.createElement) y le quiero poner algunos eventos como:

- onmouseup (es un iframe editable)
- onmousedown
- onfocus
- onkeyup

pero en firefox no anda y en chrome anda perfecto :S.. hago así:
Código Javascript:
Ver original
  1. // eventos
  2.         iframe_dom.contentWindow.onmouseup = this.mirar_botones;
  3.         iframe_dom.contentWindow.onmousedown = this.mirar_botones;
  4.         iframe_dom.contentWindow.onfocus = this.mirar_botones;
  5.         iframe_dom.contentWindow.onkeyup = this.mirar_botones;
Ni se ejecuta la función (le pongo alert para ver y no se ejecuta). Y si la ejecuto aparte si anda bien.

Gracias
Saludos
__________________
Half Music - www.halfmusic.com
  #2 (permalink)  
Antiguo 05/02/2011, 21:39
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Problema con eventos en iframe firefox

buenas...
no veo nada mal en dichas lineas; de hecho, es la forma correcta. habria que ver que hace la funcion mirar_botones. probablemente la funcion requiere ejecutarse en el contexto en que esta definido, o sea en la ventana padre. aun asi, me extraña que en chrome funcione pero no en firefox.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 05/02/2011, 22:05
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Problema con eventos en iframe firefox

Esto funciona sin problemas:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
<
script type="text/javascript">
function 
t(){
    var 
i=document.createElement('iframe'),ex;
    
ex=i.onload=function(){
        var 
doc=this.contentWindow.document || this.contentDocument;
        
doc.onmousedown=function(){alert(123);}
    }
    if(
window.ActiveXObject){
        
i.onreadystatechange=function(){
            if(
i.readyState=='complete'){
                 
ex.call(this);
             }
        }
    }
    
document.body.appendChild(i);
}
onload=t;
</script>

</head>

<body>
</body>
</html> 
Habría que ver si estás asignando los eventos cuando el document del iframe está efectivamente disponible.
  #4 (permalink)  
Antiguo 05/02/2011, 22:21
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Respuesta: Problema con eventos en iframe firefox

Bueno, miren resumí el código para demostrar como lo hago:
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. <!--
  3. var Editor = function(id){
  4.     this.init = function(){
  5.         var elwin = this;
  6.         this.input_dom = document.getElementById(id);
  7.         this.iframe_dom = document.createElement('iframe');
  8.        
  9.         with(this.iframe_dom){
  10.             src = 'about:blank';
  11.             style.height = '200px';
  12.             style.width = '500px';
  13.         }
  14.        
  15.         setTimeout(function(){
  16.             if(elwin.iframe_document.designMode)
  17.                 elwin.iframe_document.designMode = 'on';   
  18.             else if(elwin.iframe_body.contentEditable)
  19.                 elwin.iframe_body.contentEditable = true;
  20.         }, 100);
  21.        
  22.         this.input_dom.parentNode.insertBefore(this.iframe_dom,this.input_dom);
  23.        
  24.        
  25.         with((this.iframe_dom.contentDocument || this.iframe_dom.contentWindow.document)) {
  26.             clear();
  27.             open();
  28.             write("<html><body></body></html>");
  29.             close();
  30.         }
  31.        
  32.         this.iframe_document = this.iframe_dom.contentDocument || this.iframe_dom.contentWindow.document;
  33.         this.iframe_body = this.iframe_document.body || this.iframe_document.getElementsByTagName('body')[0];
  34.        
  35.         this.iframe_dom.contentWindow.onmouseup = function(){alert('activo');};
  36.     };
  37.     this.init();
  38. };
  39. var editar;
  40. window.onload=function(){
  41.     editar = new Editor('textarea');
  42. };
  43. -->
  44. </script>
  45. <textarea name="textarea" id="textarea" cols="55" rows="15"></textarea>
En chrome anda perfecto y se ejecuta el alert, y en firefox no :S..
__________________
Half Music - www.halfmusic.com
  #5 (permalink)  
Antiguo 05/02/2011, 22:27
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Problema con eventos en iframe firefox

Ahora sí te entiendo. Al parecer en modo de diseño Firefox tiene problemas con los eventos. A mi me sucede lo mismo con esto:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
<
script type="text/javascript">
function 
t(){
    var 
i=document.createElement('iframe'),ex;
    
i.width=i.height=500;
    
ex=i.onload=function(){
        var 
doc=this.contentWindow.document || this.contentDocument;
        
doc.designMode='on';
        try{
doc.body.focus();}catch(e){}//hack explorer
        
doc.execCommand("InsertImage",false,'http://t1.gstatic.com/images?q=tbn:ANd9GcRSZCAIXjjpBR8zJb6xwCimZ7J814ra2rHMcQv_aZgNmCAOHy3F&t=1'); 
        
doc.onmousedown=function(){alert(123);}
    }
    if(
window.ActiveXObject){
        
i.onreadystatechange=function(){
            if(
i.readyState=='complete'){
                 
ex.call(this);
             }
        }
    }
    
document.body.appendChild(i);
}
onload=t;
</script>

</head>

<body>
</body>
</html> 
Habrá que estudiarlo un poco
  #6 (permalink)  
Antiguo 05/02/2011, 22:35
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Respuesta: Problema con eventos en iframe firefox

Uh :S.. y no habrá alguna manera de capturar algún evento cuando se apreté un botón? intente de todos modos... El único modo que ando, es:

Código Javascript:
Ver original
  1. this.iframe_dom.contentWindow.document.body.addEventListener('click', this.mirar_botones, false);

Pero eso es al hacer click, mucho no me sirve :S.. Y creo que el firefox 4 tiene un bug, si borro el setTimeout (el que lo hace "editable" al iframe) y apretó en el iframe anda y sale el alert. Pero si apretó en "aceptar" del alert sale otro alert y así infinitamente :|
__________________
Half Music - www.halfmusic.com
  #7 (permalink)  
Antiguo 05/02/2011, 22:41
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Problema con eventos en iframe firefox

curioso, con los eventos de DOM Level 0 no funciona en firefox pero con Level 2 trabaja de lo mas bien. por cierto, el bug que comentas (los alert infinitos) al menos no me sucede en firefox3. de todos modos, ya tienes la solucion, utiliza addEventListener. no necesariamente tiene que ser el evento click, puede ser el mismo que estabas definiendo en DOM Level 0, mouseup.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #8 (permalink)  
Antiguo 05/02/2011, 22:50
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Respuesta: Problema con eventos en iframe firefox

Si pero con addEventListener solo me anda los eventos de click (los que menos me sirve)..

Código Javascript:
Ver original
  1. //eventos
  2.             this.iframe_dom.contentWindow.document.body.addEventListener('click', function(){alert('click')}, false);
  3.             this.iframe_dom.contentWindow.document.body.addEventListener('mouseup', function(){alert('click up')}, false);
  4.             this.iframe_dom.contentWindow.document.body.addEventListener('focus', function(){alert('foco')}, false);
  5.             this.iframe_dom.contentWindow.document.body.addEventListener('keyup', function(){alert('boton')}, false);

Esos son los eventos, y los de click andan si apreto sobre un enlace... :S
Lo del bug es muy gracioso porque si apretó en cualquier lado de la pantalla aparece el alert. Y solo se lo detiene si apretas click izquierdo :|
__________________
Half Music - www.halfmusic.com
  #9 (permalink)  
Antiguo 05/02/2011, 22:51
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Problema con eventos en iframe firefox

Muy buena observación, zerokilled!
Igualmente, me parece mejor dejar los iframes y trabajar directamente con contentEditable:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Documento sin título</title>
<
script>
function 
formatText(cmd){
    
document.execCommand(cmdfalsenull);
}
function 
insertarImagen(){
    var 
u;
    if(!(
u=prompt('ingresar url','http://')))return;
     
document.getElementById('pp').focus();
     
document.execCommand("InsertImage",false,u);

</script>
</head>

<body>
<form action="" method="get">
  <input name="input" type="button" onclick="formatText('bold')" value="NEGRITA" /><input name="input" type="button" onclick="formatText('italic')" value="CURSIVA" /><input name="input" type="button" onclick="formatText('underline')" value="SUBRAYADO" /><input name="input" type="button" onclick="insertarImagen()" value="INSERTAR IMAGEN" />
</form>
<div onmouseup="document.getElementById('log').innerHTML='mouseup capturado'" onmousedown="document.getElementById('log').innerHTML='mousedown capturado'" id="pp" contenteditable="true">Este es un texto editable</div>
<div id="log"></div>
</body>
</html> 
  #10 (permalink)  
Antiguo 05/02/2011, 22:55
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Respuesta: Problema con eventos en iframe firefox

Bueno... a dejar los iframe :P... que tan compatible es contentEditable??
__________________
Half Music - www.halfmusic.com
  #11 (permalink)  
Antiguo 05/02/2011, 22:57
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Problema con eventos en iframe firefox

Funciona con todos los navegadores modernos (en Firefox, a partir de la versión 3)
  #12 (permalink)  
Antiguo 05/02/2011, 23:03
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Respuesta: Problema con eventos en iframe firefox

Gracias, busque y encontré esto para el que le sirva... y ya que estoy con firefox ¬¬.. alguna manera de que document.execCommand('bold', false, null) ponga <strong> y no: (y no estando insertando html.... que sea mas automático como execCommand.. no se si me explico bien)

Código HTML:
Ver original
  1. <span style="font-weight: bold;">hola!!</span>
__________________
Half Music - www.halfmusic.com
  #13 (permalink)  
Antiguo 05/02/2011, 23:09
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Problema con eventos en iframe firefox

@pato12, fijate que los ultimos 4 eventos de ejemplos los estas registrando en el elemento <body>. no lo habia intentado en <body>, lo hice en el contexto del objeto window del marco, o sea contentWindow y ahi me funcionaron. pero en fin no se, todo depende donde quieras registrarlos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #14 (permalink)  
Antiguo 05/02/2011, 23:13
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Respuesta: Problema con eventos en iframe firefox

Noooooo!! tenes razooon :D... anda perfecto ahora.. muchas gracias! :P

Ahora.. solo me queda un "problema".. lo que pregunte arriba..
__________________
Half Music - www.halfmusic.com

Etiquetas: eventos, firefox, iframe
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 18:39.