2011-01-04 23 views
47

¿Cómo puedo saber desde una página dentro de un iframe, si el elemento primario también está dentro de un iframe?Compruebe si la ventana primaria es iframe o no

Explicación:

Mi página de inicio home.html contiene un iframe

<iframe src="sample.html"></iframe> 

necesito para detectar si home.html (es decir: los padres de sample.html) está dentro de un iframe.

Código de sample.html:

if(self==window) 
{ 
    alert('home.html is not in iframe'); 
} 
else 
{ 
    alert('home.html is in iframe'); 
} 

Mi pregunta no es un duplicado. Es un caso diferente.

+0

Es un poco confuso ... ¿Tiene un iframe en una página en un iframe? ¿Desea verificar si una página está en un iframe, o si la página que contiene el iframe está en un iframe? – Guffa

+7

Duplicado: http://stackoverflow.com/questions/326069/how-to-identify-if-a-webpage-is-being-loaded-inside-an-iframe-or-directly-into-th – Kimtho6

+0

¿Qué es el Diferentes entonces? : s – Kimtho6

Respuesta

96

Esto es cierto si una ventana no es un cuadro/iframe:

if(self==top) 

Si te gusta ver si la ventana principal de la ventana dada es un marco, el uso:

if(parent==top) 

Es una comparación simple de top (la ventana más superior de la jerarquía de ventanas) y otro objeto de ventana (self o parent).

+0

No funciona para mí :-( –

+2

si desea comprobar si la ventana primaria está dentro de un marco, simplemente use 'if (parent == top)' (devolverá true si la ventana principal no está un marco) –

+0

U puede entender mi pregunta. Gracias si (padre == top) funciona para mí –

20
var isInIFrame = (window.location != window.parent.location); 
if(isInIFrame==true){ 
    // iframe 
} 
else { 
    // no iframe 
} 
+2

o simplemente 'var isInIFrame = window.location! == window.parent.location;' funcionaría también. –

+5

Hay un caso límite en el que esto no funcionará: si ha cargado la misma página en el iframe que contiene el iframe. – Oliver

+1

también, dominio cruzado o protección similar causará un error de script al acceder a window.parent propery – oriadam

29

Comprobar si window.frameElement no es nulo y ver si su propiedad nodeName es "IFRAME":

var isInIframe = window.frameElement && window.frameElement.nodeName == "IFRAME"; 
+0

Esta respuesta es excelente porque contiene una forma simple y directa de acceder al elemento 'iframe' que contiene la página actual (cuando es cargado dentro de tal). – Oliver

+0

Estoy de acuerdo con @Oliver. De esta manera es mucho más simple que las otras dos respuestas anteriores y cualquier otra estrategia que haya visto para lidiar con este problema. Esta debería ser la respuesta aceptada ... –

Cuestiones relacionadas