Ответ 1
Глядя на длину кадра, ломается вообще, если сама страница А имеет фреймы (я знаю, что это может быть не так для этого конкретного экземпляра). Более надежным и значимым тестом будет:
if (window!=window.top) { /* I'm in a frame! */ }
У меня есть приложение, на котором есть определенная страница - позвоните ему Страница A. Страница A иногда является страницей верхнего уровня, но также иногда внедряется как iframe внутри страницы B. Все страницы поступают с одного и того же сервера и нет проблем между доменами.
У меня есть greasemonkey script, который работает на странице A. Как greasemonkey script обнаруживает, находится ли страница A в контексте iframe или нет?
Глядя на длину кадра, ломается вообще, если сама страница А имеет фреймы (я знаю, что это может быть не так для этого конкретного экземпляра). Более надежным и значимым тестом будет:
if (window!=window.top) { /* I'm in a frame! */ }
Предикат
(window.parent.frames.length > 0)
расскажет вам, что вы хотите.
if (top === self) { not in a frame } else { in a frame }
От Как определить, загружается ли веб-страница внутри iframe или прямо в окно браузера?
Как указано выше, принятое решение не работает в IE8. Кроме того, проверка window.parent.frames.length
может вызвать исключение междоменной области.
Вместо этого я смог достичь этого с помощью var isInIFrame = top.location != self.location
- он работает в IE8 и не вызывает нарушения междоменной области, если вы не пытаетесь прочитать содержимое top.location
.
Используйте window.frameElement
и проверьте, не является ли он нулевым, и если его nodeName является "IFRAME".