Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/01/2010, 15:43
spector
 
Fecha de Ingreso: marzo-2006
Mensajes: 5
Antigüedad: 18 años, 1 mes
Puntos: 0
Problema con IFrame autoajustable (crossdomain) en Google Chrome.

Hola, buenas noches.

Llevo unos dias con este problema, y no he conseguido encontrar la solución. Yo no soy programador pero me ha tocado a mi solucionar esto.

El tema es que necesito que un iframe cargue X paginas alojadas en otro servidor.

Encontré un buen ejemplo aquí: http://geekswithblogs.net/rashid/archive/2007/01/13/103518.aspx y de hecho funciona correctamente en IE y Firefox.

En Opera he conseguido que funcionara añadiendo un codigo HTML limpio y estructurado con su DTD, etc.

Pero en Google Chrome no hay manera. El contenido del iframe se carga sin parar, indefinidamente.

¿Puede que sea por el window.location.hash? La verdad es que no tengo ni idea, dejo aqui el js por si alguien me puede echar una mano.

Le estaré agradecido siempre :)

Código:
var FrameManager =

{

    currentFrameId : '',

    currentFrameHeight : 0,

    lastFrameId : '',

    lastFrameHeight : 0,

    resizeTimerId : null,



    init : function()

    {

        if (FrameManager.resizeTimerId == null)

        {

            FrameManager.resizeTimerId = window.setInterval(FrameManager.resizeFrames, 500);

        }

    },



    resizeFrames : function()

    {

        FrameManager.retrieveFrameIdAndHeight();



        if ((FrameManager.currentFrameId != FrameManager.lastFrameId) ||

            (FrameManager.currentFrameHeight != FrameManager.lastFrameHeight))

        {

            var iframe = document.getElementById(FrameManager.currentFrameId.toString());
            if (iframe == null) return;
            iframe.style.height = FrameManager.currentFrameHeight.toString() + "px";
           FrameManager.lastFrameId = FrameManager.currentFrameId;
            FrameManager.lastFrameHeight = FrameManager.currentFrameHeight;
            window.location.hash = '#';
        }
    }
    retrieveFrameIdAndHeight : function()

    {
        if (window.location.hash.length == 0) return;
        var hashValue = window.location.hash.substring(1);
        if ((hashValue == null) || (hashValue.length == 0)) return;
        var pairs = hashValue.split('&');



        if ((pairs != null) && (pairs.length > 0))

        {

            for(var i = 0; i < pairs.length; i++)

            {

                var pair = pairs[i].split('=');



                if ((pair != null) && (pair.length > 0))

                {

                    if (pair[0] == 'frameId')

                    {

                        if ((pair[1] != null) && (pair[1].length > 0))

                        {

                            FrameManager.currentFrameId = pair[1];

                        }

                    }

                    else if (pair[0] == 'height')

                    {

                        var height = parseInt(pair[1]);



                        if (!isNaN(height))

                        {

                            FrameManager.currentFrameHeight = height;

                            FrameManager.currentFrameHeight += 15;

                        }

                    }

                }

            }

        }

    },



    registerFrame : function(frame)

    {

        var currentLocation = location.href;

        var hashIndex = currentLocation.indexOf('#');



        if (hashIndex > -1)

        {

            currentLocation = currentLocation.substring(0, hashIndex);

        }



        frame.contentWindow.location = frame.src + '?frameId=' + frame.id + '#' + currentLocation;

    }

};



window.setTimeout(FrameManager.init, 300);
Gracias de antemano nuevamente.

Última edición por spector; 04/01/2010 a las 15:49 Razón: URL mostrada incorrectamente.