Iframe en Google Chrome
Publicado por REX (1 intervención) el 05/01/2010 10:30:50
Hola, buenos dias.
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 funciona correctamente en IE y Firefox.
En Opera he conseguido que funcione añadiendo un codigo HTML limpio y estructurado con su doctype.
Pero en Google Chrome no hay manera. El contenido del iframe se carga sin parar, indefinidamente.
¿Puede que sea por el window.location.hash? ¿Tiene este navegador alguna peculiaridad?
La verdad es que no tengo ni idea, dejo aqui el js por si alguien me puede echar una mano.
Le estaré agradecido siempre :)
Muchísimas gracias.
<!-- INICIO -->
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);
<-- FIN -->
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 funciona correctamente en IE y Firefox.
En Opera he conseguido que funcione añadiendo un codigo HTML limpio y estructurado con su doctype.
Pero en Google Chrome no hay manera. El contenido del iframe se carga sin parar, indefinidamente.
¿Puede que sea por el window.location.hash? ¿Tiene este navegador alguna peculiaridad?
La verdad es que no tengo ni idea, dejo aqui el js por si alguien me puede echar una mano.
Le estaré agradecido siempre :)
Muchísimas gracias.
<!-- INICIO -->
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);
<-- FIN -->
Valora esta pregunta


0