2010-06-28 5 views
5

Я работаю в среде с рамкой и пытаюсь определить, является ли кадр, на котором выполняется некоторый код javascript, верхний кадр (тот, который содержит остальные).Как определить, является ли текущий кадр родительским?

До сих пор я пытался проверить его с

window.parent != null 

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

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

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

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

ответ

7

Я нашел этот 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 это решение может быть болезненным;)

1

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

5
self === top 

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

Смежные вопросы