2009-10-02 12 views
7

Tak więc wiem, że jeśli dodaję element iFrame do strony, która nie znajduje się w tej samej domenie, nie mogę uzyskać dostępu do tej zasady elementu iframe DOM za pośrednictwem przeglądarki, ale czy strona w elemencie iframe może uzyskać dostęp do dowolnego dokumentu nadrzędnego?Czy na stronach iframe można rozpoznać, kiedy są oneramowane?

Konkretnie mam pomysłów, które są uzależnione od tego pytania:

  1. Jeżeli osadzony strona może powiedzieć, że nie jest okno nadrzędne, można dokonać zarówno witryn, które są un-iframe-stanie tak że jeśli strona wykryje, że jest zamrożona, zmienia się na stronę "Odejdź" LUB możesz uczynić ją jedyną -możliwą iframe (podobnie jak skrypt po stronie serwera dla stron, które mają być dołączone), tak aby przejść do strona, której nie ma iframed, dostałaby stronę "Go Away".

  2. Jeśli strona o ostrym kształcie ma pewne swobody, których nie ma w oknie macierzystym, może zażądać arkusza stylów okna nadrzędnego i ustawić go jako arkusz stylów, co spowoduje, że witryna będzie bardziej zintegrowana z dokumentem nadrzędnym. (Oczywiście, mógłbym tylko sprawić, by mój arkusz stylów był bardziej powiązany z witryną iframed, wiedząc, że to zrobi, ale nie uważam tego za problem).

Ktoś wie?

Odpowiedz

11

W odniesieniu do # 1, tak, można powiedzieć, jeśli są oprawione stosując kilka prostych javascript:

<script type="text/javascript"> 
if (self != top) 
{ 
    // Framed! 
} 
</script> 

Odnośnie # 2, nie jestem pewien, co można zrobić za pomocą „top” zmienna, ale wiem, że możesz zmienić jej lokalizację (więc jeśli twoja strona jest oprawiona przez inną stronę, możesz zmienić ramkę w górnej ramce - zasadniczo przekierowując użytkownika bezpośrednio do twojej strony).

Nie wiem, co jeszcze można zrobić lub czego nie można zrobić w górnej ramce - ktoś inny może podać więcej informacji.

+2

Proponuję wodowania komentarze HTML wewnątrz elementu skryptu, nie nie ma już sensu zajmować się Netscape 2. – Quentin

+0

@ David - ok, dobrze, stare nawyki umierają ciężko :) –

1

Jest to możliwe poprzez osadzanie następujące JavaScript na stronie:

if(top.location.href != self.location){ 
//do redirection or display message 
} 

może mieć to Javascript jako część szablonu witryny i uniknięcia ich ladowanie w IFrame

0

Robiłem to wcześniej, i to działało:

<script type="text/javascript"> 
if (window.parent != null) 
{ 
    // Framed! 
} 
</script> 
4

Możesz być także zainteresowany this Coding Horror article o wykrywanie ramek. Możesz wykryć, czy zostałeś oprawiony, ale są też środki zaradcze, które może podjąć strona "rodzica", aby uniemożliwić ci działanie w tym kierunku. Przykład z artykułu:

Detect czy już oprawione:

if (parent.frames.length > 0) { 
    top.location.replace(document.location); 
} 

Zapobiegaj ramkę od wykrywania i przekierowania:

var prevent_bust = 0 
    window.onbeforeunload = function() { prevent_bust++ } 
    setInterval(function() { 
    if (prevent_bust > 0) { 
     prevent_bust -= 2 
     window.top.location = 'http://server-which-responds-with-204.com' 
    } 
    }, 1) 
+2

Stary post, ale myślałem, że dodaję obserwację.Chociaż możesz zapobiec "wyniszczaniu" z elementu iframe, zawsze możesz zmienić zawartość strony po wykryciu iframe, wyświetlając komunikat o błędzie, taki jak "Ta strona została przejęta. Nie odwiedzasz tej strony w oryginalnej witrynie odwiedź stronę xyz.com/..., aby przeczytać artykuł. " – Endophage

Powiązane problemy