Как определить, является ли текущий кадр родительским? - PullRequest
5 голосов
/ 28 июня 2010

Я работаю в рамочной среде и пытаюсь определить, является ли кадр, в котором выполняется какой-либо код JavaScript, верхним (тот, который содержит остальные).

До сих пор я пыталсячтобы проверить это с помощью

window.parent != null

, но оно всегда возвращает false, как в этом простом примере.

<html>
<head>
  <script>
    alert(parent == null);
  </script>
</head>

<body>
  <h1>OH YEAH!</h1>
</body>
</html>

Есть ли способ сделать это?Мне не нужно быть портативным, сейчас я ищу решение IE6.

Ответы [ 3 ]

7 голосов
/ 28 июня 2010

Я нашел этот PDF очень полезным: http://seclab.stanford.edu/websec/framebusting/framebust.pdf

Короче говоря, если это слишком долго, чтобы прочитать, это то, что они в конечном итоге предлагают:

<style>
  html { display :none; }
</style>
<script>
if(self==top){
  document.documentElement.style.display = 'block';
}else{
top.location=self.location;
}
</script>

Вы найдете много других способов сделать это в этом pdf, и каждое из них означает «за и против». Очевидно, что в браузерах без JavaScript это решение может быть болезненным;)

5 голосов
/ 29 июня 2010
self === top

должен возвращать значение true, если выполняется в самом верхнем наборе кадров, в противном случае - значение false.

1 голос
/ 28 июня 2010

Вы можете проверить, если top.frames.length == 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...