Rileva l’incorporamento di iFrame in Javascript

Ho un’applicazione che ha una certa pagina – chiamiamola pagina A. Pagina A è a volte una pagina di primo livello, ma a volte è anche incorporata come iframe nella pagina B. Tutte le pagine provengono dallo stesso server e non ci sono problemi interdominio.

Ho uno script greasemonkey che gira sulla pagina A. Come può lo script greasemonkey rilevare se la pagina A è all’interno del contesto iframe o no?

L’esame della lunghezza del fotogramma si interrompe in generale se la pagina A ha dei frame (so che potrebbe non essere il caso per questa istanza specifica). Il test più affidabile e significativo sarebbe:

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

Il predicato

 (window.parent.frames.length > 0) 

ti dirò solo quello che vuoi.

 if (top === self) { not in a frame } else { in a frame } 

Da Come identificare se una pagina web viene caricata all’interno di un iframe o direttamente nella finestra del browser?

Come detto sopra, la soluzione accettata non funziona in IE8. Inoltre, il controllo di window.parent.frames.length può causare un’eccezione tra domini.

Invece sono riuscito a farlo con var isInIFrame = top.location != self.location : funziona in IE8 e non causa una violazione tra domini finché non si tenta di leggere il contenuto di top.location

Usa window.frameElement e controlla se non è nullo e se il suo nodeName è “IFRAME”.