Обнаружение встраивания iFrame в Javascript - PullRequest
52 голосов
/ 29 мая 2009

У меня есть приложение, которое имеет определенную страницу - назовем ее страницей A. Страница A иногда является страницей верхнего уровня, но также иногда встраивается как iframe в страницу B. Все страницы приходят с одного сервера и нет междоменных проблем.

У меня есть сценарий greasemonkey, который выполняется на странице A. Как сценарий greasemonkey может определить, находится ли страница A в контексте iframe или нет?

Ответы [ 5 ]

123 голосов
/ 29 мая 2009

Рассмотрение длины фрейма обычно нарушается, если на самой странице A есть фреймы (я знаю, что это может быть не так для этого конкретного случая). Более надежный и значимый тест будет:

if (window!=window.top) { /* I'm in a frame! */ }
11 голосов
/ 29 мая 2009

Предикат

(window.parent.frames.length > 0)

скажет вам, что вы хотите.

6 голосов
/ 22 августа 2011
4 голосов
/ 05 июля 2013

Как указано выше, принятое решение не работает в IE8. Кроме того, проверка window.parent.frames.length может вызвать междоменное исключение.

Вместо этого я смог добиться этого с помощью var isInIFrame = top.location != self.location - он работает в IE8 и не вызывает междоменного нарушения, если вы не пытаетесь прочитать содержимое top.location.

0 голосов
/ 11 июня 2012

Используйте window.frameElement и проверьте, не является ли оно нулевым, и является ли его имя_узла "IFRAME".

...