2010-06-28 6 views
5

Pracuję w środowisku ramkowym i próbuję stwierdzić, czy ramka, na której wykonywany jest kod javascript, jest ramką górną (tą, która zawiera resztę).Jak sprawdzić, czy bieżąca klatka jest nadrzędna?

Do tej pory starałem się sprawdzić go z

window.parent != null 

ale zawsze zwraca wartość false, tak jak w tym prostym przykładzie.

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

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

Czy istnieje sposób, aby to zrobić? Nie muszę być przenośna, teraz szukam rozwiązania IE6.

Odpowiedz

7

Znalazłem pdf być bardzo przydatne: http://seclab.stanford.edu/websec/framebusting/framebust.pdf

W skrócie, jeśli ten jest zbyt długi, aby czytać, to co oni ostatecznie zaproponować:

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

Znajdziesz wiele innych środków zrobić to w tym pliku pdf, a każdy oznacza "za i przeciw". Oczywiście w przeglądarkach bez JavaScript rozwiązanie to może być bolesne;)

1

Możesz sprawdzić, czy top.frames.length == 0.

5
self === top 

powinien zwracać wartość true, jeśli jest wykonywany w najwyższym zestawie ramek, w przeciwnym razie false.