807 Stimmen

Wie lässt sich feststellen, ob eine Webseite innerhalb eines Iframe oder direkt in das Browserfenster geladen wird?

Ich schreibe eine iframe-basierte Facebook-App. Nun möchte ich dieselbe HTML-Seite verwenden, um die normale Website sowie die Canvas-Seite innerhalb von Facebook darzustellen. Ich möchte wissen, ob ich feststellen kann, ob die Seite innerhalb des iframe oder direkt im Browser geladen wurde?

4 Stimmen

Ein paar schöne Möglichkeiten (einschließlich Kommentare): tommcfarlin.com/check-ob-eine-seite-ist-in-einem-iframe

3 Stimmen

Externe Links sind kein gutes Mittel, um Fragen zu beantworten. Vor allem, wenn sich der Inhalt dieser externen Links reduzieren lässt auf return window.location !== window.parent.location .

1voto

Karthikeyan Punkte 372
function amiLoadedInIFrame() {
    try {
         // Introduce a new propery in window.top
         window.top.dummyAttribute = true;
         // If window.dummyAttribute is there.. then window and window.top are same intances
         return !window.dummyAttribute;
    } catch(e) {
         // Exception will be raised when the top is in different domain
         return true;
    }
}

1voto

Jabran Saeed Punkte 4852

Ich habe tatsächlich verwendet, um window.parent zu überprüfen und es funktionierte für mich, aber in letzter Zeit Fenster ist ein zyklisches Objekt und hat immer einen Elternschlüssel, iframe oder kein iframe.

Wie in den Kommentaren vorgeschlagen, funktioniert ein harter Vergleich mit window.parent. Nicht sicher, ob dies funktioniert, wenn iframe ist genau die gleiche Webseite als Elternteil.

window === window.parent;

0voto

James Punkte 525

Nach dem, was @magnoz sagte, ist hier eine Code-Implementierung seiner Antwort.

constructor() {
    let windowLen = window.frames.length;
    let parentLen = parent.frames.length;

    if (windowLen == 0 && parentLen >= 1) {
        this.isInIframe = true
        console.log('Is in Iframe!')
    } else {
        console.log('Is in main window!')
    }
}

-1voto

dlauzon Punkte 986
var inIFrame = window.location !== window.parent.location;

-2voto

Joao Belchior Punkte 43

Wenn Sie wissen möchten, ob der Benutzer auf Ihre App über die Registerkarte "Facebook-Seite" oder "Canvas" zugreift, suchen Sie nach der signierten Anfrage. Wenn Sie diese nicht erhalten, greift der Benutzer wahrscheinlich nicht über Facebook zu. Um sicherzugehen, überprüfen Sie die Struktur und den Inhalt der signed_request-Felder.

Mit dem php-sdk können Sie den Signed Request wie folgt erhalten:

$signed_request = $facebook->getSignedRequest();

Mehr über Signed Request können Sie hier lesen:

https://developers.facebook.com/docs/reference/php/facebook-getSignedRequest/

und hier:

https://developers.facebook.com/docs/reference/login/signed-request/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X