Comunidad de diseño web y desarrollo en internet online

problema con javascript + crossdomain

Citar            
MensajeEscrito el 12 Ene 2009 04:49 pm
Hola como estan?

Tengo un problemita que no puedo resolver, ojala me puedan dar un poco de luz al respecto.

Bien, el problema esta en la comunicacion entre 2 sistemas diferentes de la empresa. Los dos sistemas son web, uno es un html comun y el otro es un cgi en donde cada uno estan en servidores diferentes.

Desde el html cargo dentro de un iframe al cgi y necesito que por medio de javascript llamar desde el html superior a funciones que estan dentro del cgi q cargo en el iframe. Pero ahi esta el problema, como estan en diferentes servidores el javascript no puede ejecutar funciones dentro de otro ambito (crossdomain).

Entre las soluciones q encontre por internet y debido a q el cgi lo desarrolla otro equipo en otro pais no encontre nada que pueda resolver desde mi lado.... por lo q intente "inventar" algo q pueda funcionar pero no pude...

La idea es q desde el cgi "registre" listeners de eventos al padre y el padre lance eventos y el cgi ejecuta el handler y lanza la funcion correspondiente.... supuse q de esta manera, por medio de los eventos evitaria el crossdomain, pero cuando debageo con el firebug me salta que no puede acceder a las propiedades...

Este es el codigo que utilzo en el cgi

Código Javascript :

mapElements = { 
                     // tipoEvento: [parametos de reportclick]
                     evento1:    ["param1_1", "param1_2"],
                     evento2:    ["param2_1", "param2_2"],
                     }
                     
         function onLoad()
         {
            var type;
            for( type in mapElements)
            { 
               parent.jQuery(parent.document).bind(type, onHandlerEvent);
            }
         }
         
         function onHandlerEvent(e, msg)
         {
            if ( mapElements[e.type] )
            {
               reportclick(arr[0], arr[1]);
            }
            
         }


y desde el padre lanzaria los eventos al document

Código Javascript :

jQuery(document).trigger("evento1");



Funciono en iframes q esten en el mismo server pero no cuando estan en diferentes servidores....


Tb pense en utilizar un flash dentro del cgi y hacer la comunicacion por LocalConnect de flash... o bien poner dentro del cgi otro iframe con una pag q este en el mismo dominio q el padre q he visto en google como posible solucion...

Espero q alguien me pueda iluminar el camino para resolverlo

Graxx y saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 14 Ene 2009 02:18 pm
Ya encontre la solucion gracias...

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 11 Feb 2009 04:24 pm
Saludos camarada, seria bueno que pusieras como lo has solucionado ya que tambien estoy pasando por problemas similares.

El problema que tengo es que se desarrollo un mini CMS con jQuery 1.3, todo funciona en localhost y con FF e IE, el problema viene cuando se sube al servidor pues funciona con IE pero no con FF y me marca un error con las peticiones de AJAX del jQuery, como si no pudiera ejecutarlas solo con FF.

Espero contar con algun apoyo, suerte y hasta pronto.

Por ralph

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Feb 2009 07:24 pm
Hola

Mira lo solucione de la siguiente forma:

En el html de tu servidor cargas el iframe, luego para pasarle datos utilizas anclas

Código Javascript :

window.frames[0].location = 'http://arscaw01:8080/tempos/miIframe7.html#clave';


Luego en el html pones q llame a una funcion onload... el codigo q debes agregar es el siguiente:

Código Javascript :

                   /*
         Handler del onLoad. Como esta dentro de un iframe el evento onload
         solo se ejecuta en la primera carga, si luego cambia el location no
         se ejecuta el onload.
         
         El setInterval queda encendido aun cuando se haya cambiado de pagina
         */
         function onLoad()
         {
            setInterval(checkForMessages, 200);
            checkForMessages();   
         }
         /*
         Handler del setInterval
         Verifica si el iframe cambio de url (cambio el valor del ancla)
         */
         function checkForMessages(){
            var type = gup();
            if(type != lastType && type != ""){
               lastType = type;
               /*
                                        hago lo q quiero con el parametro q llego
                                        */
            }
         }
         /*
         Me devuelve el ancla de la url
         */
         function gup( name ){
            try
            {
               var regexS = "[#]((.)*)[\\?]?";
               var regex = new RegExp ( regexS );
               var tmpURL = window.location.href;
               var results = regex.exec( tmpURL );
               if( results == null )
                  return"";
               else
                  return results[1];
            } 
            catch (e)
            {
               return "";
            }
         }


En resumen... vos al url del iframe le vas seteando anclas... y en el html del iframe hay un evento q captura el cambio de ancla....

Bueno espero q te sirva, cualqueir cosa avisame


Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 11 Mar 2009 01:52 am
Que tal, hay otras formas para hacer peticiones AJAX CROSS-DOMAIN

Una opción es cargando un script dinámico cuya URL sea por ejemplo un PHP, dicho PHP nos devolverá el response en formato JSON es decir.

La URL a donde haremos la petición es la siguiente
http://www.otro-dominio.com/handler.php?accion=mostrar&empresa=Fujar&callback=Mostrar
Es importante veamos el parametro callback, ya que es la funcion que se va a ejecutar cuando cargue el script

Código :

//JAVASCRIPT
//Funcion para cargar dinamicamente un script.
var urlToSend = "http://www.otro-dominio.com/handler.php?accion=mostrar&empresa=Fujar&callback=Mostrar";
var loadScript = function(url){
      var head = document.getElementsByTagName("head")[0];
      var script = document.createElement("script");
      script.type = "text/javascript";
      script.src = url;
      head.appendChild(script);
   }
function Mostrar(json){
         alert(json.numero);
}
loadScript(urlToSend);


David Jacob Jarquin Rodriguez escribió:


---- En el código anterior se carga el script que en realidad es un PHP que a su vez nos devolverá un json, cuando cargue el script se ejecutará la función que yo le pasé como parámetros. ----



Código :

//PHP
$callBack = $_GET["callback"];
$json = "{\"numero\":5}";
echo $callBack."(".$json.");";


Otra opción es utilizar flash, también es crossdomain y además sirven para enviar datos POST, hay una librería ya hecha que se llama Flash4AJAX
http://blog.monstuff.com/Flash4AJAX/static/Xdomain.html

Por jacobocho

6 de clabLevel



 

msie
Citar            
MensajeEscrito el 11 Mar 2009 05:37 pm
Hola

Es cierto php resuelve todos los problemas de crossdomain, pero la aplicacion mia era sin php y solo se podia interactuar por medio del lado del usaurio ya q de un lado era flex/sap y del otro javascript/.net ya q habia q interactuar directamente con googlemaps y no con nada del sevidor.


Saludos

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.