Cómo saber si un elemento está en un iframe oculto

Using jQuery, one can easily find out whether a particular element is visible using

$(element).is(':visible')

While having some limitations (doesn't cover css visibility hidden or the actual visibility in the viewport, i.e. whether it's covered by other elements or scrolled away), I find it being useful for my scenario. The catch is, it only works within one iframe.

If the element has any parent within its document with display:none;, it returns false. If the whole document is included in an iframe which has display:none, it returns true. Is it possible to somehow detect this in another way ?

preguntado el 31 de enero de 12 a las 08:01

3 Respuestas

Hmm, seems like you have to call top (parent) document within an iframe, then search for specific iframe and check if it's visible.

You'll probably have to have same domain/subdomain for this to work, but anyway:

Let's assume you know iframe id/class (you have to).

if ($(top).find('#iframeID').is(':visible')) {
  // iframe is visible
} else {
 // iframe is NOT visible
}

Can't guarantee correct work.

Respondido el 31 de enero de 12 a las 13:01

Seems that the window's frameElement property works in all browsers and delivers the current iframe where the window is contained (if cross-domain restriction doesn't apply, which was my case).

Respondido el 31 de enero de 12 a las 15:01

not possible afaik. an iframe is basically a different site and as such guarded against xss. simply don't use iframes but server-side includes.

Respondido el 31 de enero de 12 a las 14:01

An iframe is only 'guarded against XSS' if it's from a different (sub)domain and neither the parent document nor the iframe adjust document.domain for the domains to match (note that you can only do this between subdomains to their parent domains, eg foo.example.com y bar.example.com can both set it to example.com and can then communicate). - Gijs

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.