Foros del Web » Programando para Internet » Javascript »

IExplorer captura link y ejecuta AJAX pero igual abre otra ventana nueva

Estas en el tema de IExplorer captura link y ejecuta AJAX pero igual abre otra ventana nueva en el foro de Javascript en Foros del Web. Tengo una pagina asp que funciona bien en Firefox, pero en IE y Crome tiene un problema. Lo raro es que la rutina en js ...
  #1 (permalink)  
Antiguo 12/04/2010, 18:15
 
Fecha de Ingreso: abril-2010
Ubicación: Montevideo
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Exclamación IExplorer captura link y ejecuta AJAX pero igual abre otra ventana nueva

Tengo una pagina asp que funciona bien en Firefox, pero en IE y Crome tiene un problema.

Lo raro es que la rutina en js que funciona bien los otros modulos de la misma página.

El error se produce en la parte principal llamada "navegador" y que permite ver una vista previa de la página a la que se navegará. En Firefox se muestra la vista previa correctamente, pero en IE además de mostrarla se abre una nueva ventana como si no capturara correctamente el evento "click" pero lo hace ya que la vista previa aparece.

El mismo sistema se usa en la parte llamada "INDICE" que hace aparecer unas listas de datos, pero ahí funciona bien en IE. (las librerias js de esta parte son http://universaldata.sytes.net/servidorweb/tabla.js y http://universaldata.sytes.net/servidorweb/base.js)

La página es http://universaldata.sytes.net/buscador_conceptual.asp

la libreria que se encarga de esto es
http://universaldata.sytes.net/servidorweb/concepto.js

la funcion procesarEventos
carga la pagina en el Navegador e invoca inicializarEventosHijos que captura los links de la pagina cargada y para el caso de clic ejecutará la funcion sobreEnlaceHijo que es la que muestra la vista previa en el div de la derecha.

Se puede ver una Demostracion con el boton amarillo si no se entiende. Con ese boton se ve el funcionamiento correcto ya que solo carga los div con codigo y no interviene AJAX.

Si el concepto es muy revolucionario pueden verse unos videos explicativos con un link llamado Video y hay un blog que explica los principios.

Ya he hecho pruebas cambiando sacando target='_blank', no es por ahí.


Desde ya les agradezco su ayuda.
  #2 (permalink)  
Antiguo 28/04/2010, 19:56
 
Fecha de Ingreso: abril-2010
Ubicación: Montevideo
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: IExplorer captura link y ejecuta AJAX pero igual abre otra ventana nueva

El archivo donde está el problema (supongo) es http://universaldata.sytes.net/servidorweb/concepto.js

Código Javascript:
Ver original
  1. // JavaScript Document
  2.  
  3. function presionEnlace(e){
  4. //toma el link de "resultados" y ejecuta cargarConcepto
  5.   if (window.event)
  6.       { window.event.returnValue=false;
  7.         var url=window.event.srcElement.getAttribute('href');
  8.         cargarConcepto(url + "&origen=site");
  9.         return false;
  10.         }
  11.   else
  12.     if (e)    {
  13.       e.preventDefault();
  14.       var url=e.target.getAttribute('href');
  15.       cargarConcepto(url + "&origen=site");  } //para que Moxila...
  16. }
  17.  
  18. var conexion2;
  19. function cargarConcepto(url) {
  20. //funcion ajax asociada a evento link; pide la url (asp) del link de resultado
  21.   conexion2=crearXMLHttpRequest();
  22.   conexion2.onreadystatechange = procesarEventosConcepto;
  23.   conexion2.open("GET", url, true);
  24.   conexion2.send(null);
  25. }
  26.  
  27. function procesarEventosConcepto(){
  28. //carga en div concepto el resultado ajax de cargarConcepto
  29.   var concepto = document.getElementById("concepto");
  30.   if(conexion2.readyState == 4)
  31.       {
  32.         concepto.innerHTML = conexion2.responseText;
  33.         inicializarEventosHijos(concepto);
  34.         var scs=conexion2.responseText.extractScript();
  35.         scs.evalScript();
  36.       }
  37.   else
  38.       { concepto.innerHTML = "Cargando el concepto desde resultados " + "<img src='http://universaldata.sytes.net/imagenes/cargando.gif' >" ;  }
  39. }
  40.  
  41. function inicializarEventosHijos(codigo){  
  42. //captura los eventos de los links del concepto (desde resultados) asociando a la funcion presionEnlaceHijo y sobreEnlaceHijo
  43.     var lista=codigo.getElementsByTagName('a');
  44.     for(f=0;f<lista.length;f++){
  45.         if (window.event){
  46.             lista[f].attachEvent('onclick',clickEnlaceHijo);
  47.             return true;
  48.             addEvent(lista[f],'click',clickEnlaceHijo,false);
  49.             addEvent(lista[f],'dblclick',dobleclicEnlaceHijo,false);
  50.         } else {
  51.             addEvent(lista[f],'click',clickEnlaceHijo,false);
  52.             addEvent(lista[f],'dblclick',dobleclicEnlaceHijo,false);
  53.         }
  54.     }
  55. return false;
  56. }
  57.  
  58. function dobleclicEnlaceHijo(e){
  59. //toma el link de "conceptos" y ejecuta cargarHijo
  60.   if (window.event)
  61.       { window.event.returnValue=false;
  62.         var url=window.event.srcElement.getAttribute('href');
  63.         if (url==null || url.indexOf("concepto.asp")==-1){url=window.event.srcElement.parentNode.getAttribute('href')};
  64.         if (url==null ){return;};
  65.         cargarHijo(url + "&origen=site"); }
  66.   else {
  67.     if (e)    {
  68.         e.preventDefault();
  69.         var url=e.target.getAttribute('href');
  70.         if (url==null || url.indexOf("concepto.asp")==-1){url=e.target.parentNode.getAttribute('href')};
  71.         if (url==null ){return;};
  72.         cargarHijo(url + "&origen=site"); }  }
  73. }  
  74.  
  75. var pos_ant=0; var urlant;
  76.  
  77. function clickEnlaceHijo(e){
  78.     if (window.event){
  79.         var url=window.event.srcElement.getAttribute('href');
  80.         if (url==null || url.indexOf("concepto.asp")==-1){url=window.event.srcElement.parentNode.getAttribute('href')};
  81.         //if (url==null ){return false};
  82.         verHijo(url + "&origen=site");}
  83.     else {
  84.         if (e)    {
  85.           e.preventDefault();
  86.           var url=e.target.getAttribute('href');
  87.           if (url==null || url.indexOf("concepto.asp")==-1){url=e.target.parentNode.getAttribute('href')};
  88.            if (url==null ){return false};
  89.           if (url.indexOf("dinero.asp")>-1){verHijo(url)} else {
  90.           verHijo(url + "&origen=site"); }
  91.         }
  92.     };
  93. }
  94.  
  95. var conexion3;
  96.  
  97. function cargarHijo(url) {
  98. //funcion ajax asociada a evento link; pide la url (asp) del link de concepto
  99.   if(url==null)  { return ; }  
  100.   if(url=='')  { return ; }
  101.  
  102.   if(url.indexOf('descripci') != -1)  { return; }; //omite accion en descripciones
  103.   if(url.indexOf('tabla=foto') != -1)  {
  104.     return;
  105.     }; //omite accion en foto
  106.   if(url.indexOf('&tabla=bases') != -1){ //es una base
  107.     cargarResultadosBase(url);   return;
  108.   }
  109.  
  110.   if(url.indexOf('tabla=tablas') != -1){ //es una tabla
  111.     cargarTabla(url); return;
  112.   }
  113.  
  114.   if(url.indexOf('descripci') == -1 && url.indexOf('concepto')!=-1){
  115.       conexion3=crearXMLHttpRequest();
  116.       conexion3.onreadystatechange = procesarCargarHijo;
  117.       conexion3.open("GET", url+"&origen=site", true);
  118.       conexion3.send(null);
  119.       return;
  120.   }
  121.   //window.open(url);
  122. }
  123.  
  124. var conexion4;
  125. function verHijo(url) {
  126. //funcion ajax asociada a evento link; pide la url (asp) del link de concepto
  127.   if(url==null)  { return ; }  
  128.   if(url=='')  { return ; }
  129.  
  130. //omite vista previa de descripciones
  131.   var pos = url.indexOf('descripci');
  132.   if(pos != -1)  { return; };
  133.  
  134. //omite vista previa de tabla fotos
  135.   var pos = url.indexOf('tabla=foto');
  136.   if(pos != -1)  {      alert("Haga clic en el + a la izquierda de las fotos a 100 px o botón derecho y abrir en otra pestaña para tamaño original");
  137.  return;};
  138.  
  139. //alerta 3D
  140.   var pos = url.indexOf('3D');
  141.   if(pos != -1)  {      alert("Objetos 3D aún no programados en la version web, solo en EDU escritorio.");
  142.  return;};
  143.  
  144. //vista previa de las fotos  
  145.   ext=url.substr(url.length-16,4);
  146.   var posibl=".jpg.gif.png";
  147.   var pos = posibl.indexOf(ext.toLowerCase());
  148.   if(pos != -1)  {
  149.     var conceptohijo= document.getElementById("hijo");
  150.     url=url.substr(0,url.length-12);
  151.     conceptohijo.innerHTML = "<img src='GDE/"+url+"'>";
  152.     return;
  153.   };
  154.  
  155. //omite vista previa si no es concepto
  156.  
  157.   //excepciones
  158.   var pos = url.indexOf('concepto.asp');
  159.   var posgoog = url.indexOf('google');
  160.   var poswiki = url.indexOf('wiki');
  161.   var dine = url.indexOf('inero');
  162.   if (posgoog>-1 || poswiki>-1 || dine!=-1){window.open(url);};
  163.   if(pos == -1)  { return; };
  164.   conexion4=crearXMLHttpRequest();
  165.   conexion4.onreadystatechange = procesarVerHijo;
  166.   conexion4.open("GET", url+"&origen=site", true);
  167.   conexion4.send(null);
  168.  
  169. }
  170.  
  171. function procesarCargarHijo(){
  172. //carga en div concepto el resultado ajax de cargarConcepto
  173.   var concepto = document.getElementById("concepto");
  174.   if(conexion3.readyState == 4)
  175.       { concepto.innerHTML = conexion3.responseText;
  176.         var conceptohijo= document.getElementById("hijo");
  177.         conceptohijo.innerHTML = "<span>-</span>";
  178.         inicializarEventosHijos(concepto);
  179.       }
  180. }
  181.  
  182. function procesarVerHijo(){
  183. //carga en div 'hijo' el resultado ajax de cargarConcepto
  184.   var concepto= document.getElementById("hijo");
  185.   if(conexion4.readyState == 4)
  186.       { concepto.innerHTML = conexion4.responseText;
  187.         inicializarEventosVerHijos(concepto);
  188.         return;
  189.       }
  190.   else { concepto.innerHTML = "Cargando vista previa "  ;  }
  191.  
  192. }
  193.  
  194. function inicializarEventosVerHijos(codigo){  
  195. //captura los eventos de los links de los hijos asociando la funcion presionEnlaceHijo
  196.     var lista=codigo.getElementsByTagName('a');
  197.     for(f=0;f<lista.length;f++){
  198.                 addEvent(lista[f],'click',nada,false);
  199.     }
  200. }
  201.  
  202. function nada (){}


Estos son los archivos http://universaldata.sytes.net/servidorweb/tabla.js

Código Javascript:
Ver original
  1. function inicializarEventosBase(base){
  2. //captura los eventos de los links de base asociando la funcion presionEnlaceBase
  3. var lista=base.getElementsByTagName('a');
  4.     for(f=0;f<lista.length;f++){
  5.         addEvent(lista[f],'click',presionEnlaceBase,false);
  6.     }
  7. }
  8.  
  9. function presionEnlaceBase(e){
  10. //toma el link de "tablas" y ejecuta cargarTabla
  11.   if (window.event)
  12.       { window.event.returnValue=false;
  13.         var url=window.event.srcElement.getAttribute('href');
  14.         cargarTabla(url+"&origen=site"); }
  15.   else
  16.     if (e)    {
  17.       e.preventDefault();
  18.       var url=e.target.getAttribute('href');
  19.       cargarTabla(url+"&origen=site");  } //para que Moxila...
  20. }
  21.  
  22. var conexionT;
  23. function cargarTabla(url) {
  24. //funcion ajax asociada a evento link; pide la url (asp) del link de base
  25.  
  26.   conexionT=crearXMLHttpRequest();
  27.   conexionT.onreadystatechange = procesarEventosBase;
  28.   conexionT.open("GET", url, true);
  29.   conexionT.send(null);
  30. }
  31.  
  32. function procesarEventosBase(){
  33. //carga en div tabla el resultado ajax de cargarTabla
  34.   var latabla = document.getElementById("tabla");
  35.   if(conexionT.readyState == 4)
  36.       {
  37.         latabla.innerHTML = conexionT.responseText; //carga la tabla
  38.         inicializarEventosTabla(latabla);
  39.         var scs=conexionT.responseText.extractScript();
  40.         scs.evalScript();
  41.       }
  42.   else
  43.       { latabla.innerHTML = 'Cargando tabla ' + "<img src='http://universaldata.sytes.net/imagenes/cargando.gif'>";
  44.       }
  45. }

y el otro citado: http://universaldata.sytes.net/servidorweb/base.js

Código Javascript:
Ver original
  1. function presionBase(e){
  2. //toma el link de base y ejecuta cargarResultadosBase
  3.   if (window.event)
  4.       { window.event.returnValue=false;
  5.         var url=window.event.srcElement.getAttribute('href');
  6.         cargarResultadosBase(url); }
  7.   else
  8.     if (e) {
  9.       e.preventDefault();
  10.       var url=e.target.getAttribute('href');
  11.         cargarResultadosBase(url); }
  12. }
  13.  
  14. var conexionbase;
  15.  
  16. function cargarResultadosBase(url) {
  17. //pide ajax de para base
  18.   if(url==null)  { return; }
  19.   if(url==''){    return;  }
  20.   conexionbase=crearXMLHttpRequest();
  21.   conexionbase.onreadystatechange =verBase;
  22.   conexionbase.open("GET", url, true);
  23.   conexionbase.send(null);
  24. }
  25.  
  26. function verBase(){
  27. //coloca en div base el resultado de resultados.asp y inicializa sus eventos de links
  28.   var labase = document.getElementById("base");
  29.   if(conexionbase.readyState == 4)
  30.       { texto=conexionbase.responseText;
  31.       labase.innerHTML = texto; //carga la base
  32.       inicializarEventosBase(labase);
  33.       var scs=conexionbase.responseText.extractScript();    //capturamos los scripts
  34.       scs.evalScript();       //ahora si, comenzamos a interpretar todo  
  35.       }
  36.   else
  37.       { labase.innerHTML = 'Cargando base. ' + "<img src='http://universaldata.sytes.net/imagenes/cargando.gif'>";  }
  38. }

Esta muy complicado?
  #3 (permalink)  
Antiguo 14/06/2010, 14:51
 
Fecha de Ingreso: abril-2010
Ubicación: Montevideo
Mensajes: 4
Antigüedad: 14 años
Puntos: 0
Respuesta: IExplorer captura link y ejecuta AJAX pero igual abre otra ventana nueva

bueno, lo respondo yo mismo, ahora que encontré el problema:
falta un codigo:
Código Javascript:
Ver original
  1. window.event.returnValue=false;
despues del:
Código Javascript:
Ver original
  1. if (window.event)
que sí aparece en las otras rutinas similares como puede verse en las lineas 6 y 61 pero falta entre las 78 y 79 del primer cuadro de código
Así que es una linea imprescindible para que la captura no teminie ejecutando el clic del link.

Saludos.

Etiquetas: ajax, explorer, internet
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 23:26.