2009-10-02 5 views
7

So weiß ich, dass, wenn ich ein iFrame auf einer Seite enthalten, die nicht auf der gleichen Domain, die ich nicht, dass iframe DOM über Browser Politik zugreifen können, kann aber eine Seite, die in einem Iframe ist jede Art von übergeordnete Dokument zugreifenden tun?Können Iframe-Seiten anzeigen, wann sie iframed sind?

Insbesondere habe ich Ideen, die auf diese Frage Kontingent sind:

  1. Wenn die eingebettete Seite sagen kann, dass es nicht das übergeordnete Fenster ist, könnte man entweder Websites machen, die un-iframe-fähig sind so dass, wenn die Seite erfasst, ist es Iframes es eine „Go Away“ Seite Änderungen an oder Sie könnten es nur-iframe-fähig (für Seiten, die nur gemeint zu sein, enthält ähnlich einem serverseitigen Skript) machen, damit gehen Die Seite, wenn sie nicht iframed ist, würde eine "Go Away" Seite bekommen.

  2. Wenn die iframed-Seite bestimmte Freiheiten hat, die das übergeordnete Fenster nicht bietet, könnte sie das Stylesheet des übergeordneten Fensters anfordern und als Stylesheet festlegen, wodurch die Site mehr in das übergeordnete Dokument integriert wird. (Natürlich könnte ich dann mein Stylesheet eher mit der iframed-Site in Verbindung bringen, da ich weiß, dass es das tun wird, aber das sehe ich nicht als Problem an).

Jeder weiß?

Antwort

11

In Bezug auf # 1, ja, man kann sagen, wenn Sie gestaltet werden einige einfache javascript:

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

In Bezug auf # 2, ich bin nicht sicher, was Sie tun können, die „top“ mit Variable, aber ich weiß, dass Sie den Standort ändern können (wenn Ihre Site beispielsweise von einer anderen Site umrahmt wird, können Sie durch den Frame den Speicherort des obersten Frames ändern und damit den Benutzer direkt auf Ihre Site umleiten).

nicht sicher, was sonst kann man oder nicht, obwohl mit dem oberen Rahmen zu tun - jemand anderes könnte die Lage sein, mehr Informationen zu liefern.

+2

Ich schlage vor, die HTML-Kommentare im Script Element Notwasserung, gibt es Kein Grund mehr, Netscape 2 zu verpflegen. – Quentin

+0

@ David - ok, schöne, alte Gewohnheiten sterben schwer :) –

1

Dies ist möglich durch Einbettung folgende JavaScript in der Seite:

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

Diesen Javascript als Teil der Website-Vorlage haben und verhindern, dass jede Seite in IFrame

0

angezeigt wird, ich habe getan, dies vor, und es hat funktioniert:

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

Sie könnten auch interessiert sein an this Coding Horror article über Frames zu erfassen. Sie können feststellen, ob Sie eingerahmt wurden, aber es gibt auch Gegenmaßnahmen, die die "Eltern" -Seite ergreifen kann, um Sie daran zu hindern, darauf einzugehen. Beispiel aus dem Artikel:

erkennen, ob Sie eingerahmt worden sind:

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

Prevent einen Rahmen von Erkennen und Umleiten:

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

Alte Post, aber dachte, ich würde eine Beobachtung hinzuzufügen.Während Sie daran gehindert werden können, aus dem Iframe herauszuspringen, können Sie den Inhalt Ihrer Seite immer ändern, wenn iframing erkannt wird, um eine Fehlermeldung wie "Diese Seite wurde entführt. Sie besuchen diese Seite nicht auf der echten Seite Bitte besuchen Sie xyz.com/... um den Artikel zu lesen. " – Endophage