Ich führe es in meinem Appserv (mit PHP 5.2.6) aus und es funktioniert nicht. Kann mir jemand erklären, was ich genau tun muss, um das zu überwinden?
Sie haben Pech: yahoo.com erlaubt Ihnen nicht, ihre Website in einen Iframe einzubetten. Auch Facebook oder andere beliebte Websites nicht.
Der Grund für diese Einschränkung ist Clickjacking.
Sie können dies überprüfen, indem Sie die Antwortheader von ihrer Website überprüfen; sie spezifizieren X-Frame-Options:SAMEORIGIN Das bedeutet, dass nur yahoo.com yahoo.com-Seiten einbetten kann.
Einige ältere Browser erzwingen den Header nicht, aber alle neuen werden es tun. Afaik, es gibt keinen einfachen Weg daran vorbei.
Die einzige Lösung, die mir einfällt, ist die Implementierung eines Proxy-Skripts, dh Sie betten ein Skript ein, das auf Ihrem Server lebt und den Remote-Inhalt für Sie abruft.
Z.B. Ihr Iframe ruft “/my-proxy.php?url=http://www.yahoo.com/” und dieses Skript würde so aussehen:
<?php
header('X-Frame-Options: SAMEORIGIN'); // don't allow other sites to use my proxy
echo file_get_contents($_GET['url']);
Ihr Kilometerstand kann variieren…
scheinen funktioniert! Ich werde es weiter testen … Wenn beim folgenden Test kein Problem auftritt, erhalten Sie, wie versprochen, 200 Reputation
– Sayakiss
18. Mai 2013 um 14:17 Uhr
coursera.org wird über HTTPS bereitgestellt. Wahrscheinlich müssen Sie nur die aktivieren/installieren php_openssl Erweiterung damit es funktioniert.
– jmlnik
18. Mai 2013 um 14:32 Uhr
Stackoverflow verwendet Javascript, um das Einbetten von Iframes zu verhindern. Fyi, das ist nicht eine gute Lösung. Die gute Lösung besteht darin, Iframes ganz zu vermeiden: ux.stackexchange.com/questions/4934/…
– jmlnik
18. Mai 2013 um 14:40 Uhr
Es gibt verschiedene Möglichkeiten für Websites, Iframes zu verhindern. Einige verwenden Header (wie Yahoo) und andere Javascript (wie Stackoverflow). Obwohl es Möglichkeiten gibt, diese zu umgehen, indem Sie Proxys verwenden und den Code mit regulären Ausdrücken umschreiben, ist dies eine schrecklich schlechte Praxis. Als triviales Beispiel ist meine Proxy-Lösung gut genug, aber das war es auch schon. Tut mir leid, dass es keine bessere Lösung für Sie gibt. Fühlen Sie sich frei, eine neue/spezifischere Frage zu eröffnen.
– jmlnik
18. Mai 2013 um 15:16 Uhr
Sie haben Probleme mit der ursprungsübergreifenden Ressourcenfreigabe. Lese das Wikipedia CORS und MDN CORS Artikel.
Was Ihren Ausschnitt betrifft,
<?php
header('X-Frame-Options: GOFORIT');
?>
hinzugefügt werden muss zu der Seite, die bedient wird und nicht auf die Seite/den Code, der es anfordert, was in diesem Fall wäre yahoo.com. Aber wie Sie nicht dienen yahoo.com selbst, es gibt keine Möglichkeit, es hinzuzufügen.
Jedoch wenn die Frage sich auf Ihre eigenen Seiten bezog und yahoo.com war nur ein Beispiel, Sie können einfach die richtigen HTTP-Header wie in den Artikeln angegeben festlegen, und Sie wären gut.
Einige Websites wie Google, Yahoo haben die iFrame-Einbettung für ihre Website deaktiviert. Wenn Sie das tun möchten, holen Sie sich ihr HTML mit curl oder file_get_conents auf der Serverseite und zeigen Sie es an.
Überprüfen Sie den HTTP-Antwortheader X-Frame-Option. Ich denke, für Yahoo sollte es deny oder sameorigin sein, was bedeutet, dass nur die Seite von Yahoo ihre anderen Seiten in Iframe einbetten kann
Hinzufügen ‘X-Frame-Header ignorieren‘ plugin in google chorme dann funktioniert es einwandfrei.
10057800cookie-checkWarum Iframe bei yahoo.com nicht funktioniertyes