web-dev-qa-db-fra.com

Détecter l'incorporation d'iFrame dans Javascript

J'ai une application qui a une certaine page - appelons-la Page A. La page A est parfois une page de niveau supérieur, mais elle est aussi parfois intégrée comme un iframe dans la page B. Toutes les pages proviennent du même serveur et il n'y a pas problèmes interdomaines.

J'ai un script greasemonkey qui s'exécute sur la page A. Comment le script greasemonkey peut-il détecter si la page A se trouve dans le contexte iframe ou non?

53
Cheekysoft

La recherche de la longueur des trames tombe généralement en panne si la page A elle-même contient des trames (je sais que ce n'est peut-être pas le cas pour cette instance spécifique). Le test le plus fiable et le plus significatif serait:

if (window!=window.top) { /* I'm in a frame! */ }
125
annakata

Le prédicat

(window.parent.frames.length > 0)

vous dira exactement ce que vous voulez.

11
Artem Barger
6
Mike Grace

Comme indiqué ci-dessus, la solution acceptée ne fonctionne pas dans IE8. De plus, la vérification de window.parent.frames.length peut provoquer une exception interdomaine.

Au lieu de cela, j'ai pu y parvenir avec var isInIFrame = top.location != self.location - il fonctionne dans IE8 et ne provoque pas de violation interdomaine tant que vous n'essayez pas de lire le contenu de top.location.

4
zachberry

Utilisation window.frameElement et vérifiez s'il n'est pas nul et si son nodeName est "IFRAME".

0
Pink Duck