en / ru

Iframe ли это?

При использовании user-scripts столкнулся с неприятностью, что скрипты подключались не только на сайты, соответствующие @include шаблону, но и на iframe с этого сайта. Разумеется, это было нежелательным поведением. На некоторых сайтах количество таких iframe доходило до 30 штук, что вызывало осложнения. Найденный трюк помог решить проблему:
if(window.top != window.self) { /* script is in iframe! */ }

Есть и более универсальная JS проверка:
var isFramed = false;
try {
  isFramed = window != window.top || document != top.document || self.location != top.location;
} catch (e) {
  isFramed = true;
}
if (isFramed) {
  /* script is in frame */
}
Проверка учитывает случаи, когда фрейма не принадлежит к пространству адресов домена основного окна браузера. В этом случае доступ к переменным и свойствам основного окна из фрейма будет невозможен, согласно правилам безопасности браузера.