2008-09-26 7 views
5

Ich habe ein Tool erstellt, das mit einem ziemlich beliebten Musikhändler verwendet wird.Würde einen Rahmen (Toolbar) um einen iFrame schließen.

Das Tool bietet eine erweiterte Suchfunktion (transparent last.fm Ergebnisse, keine Werbung, keine Lahmheit, nichts gruselig) und ich habe die nützlichste und unaufdringlichste Möglichkeit gefunden, die Suche als eine Symbolleiste mit dem viel geschmähten anzuzeigen iframe. Dadurch können Benutzer die Suche laden, ohne den Fokus des Benutzers zu stehlen.

Da ich kein besonders großer Fan von iFrames bin, dachte ich, es wäre trivial, einen "close this frame" (ala Google Bildsuche) Link hinzuzufügen, der es Nutzern ermöglicht, schnell und einfach die Kontrolle über ihren Browser zu erlangen.

Aber im Gegensatz zu google weiß ich nicht, wo sich der Inhalt im iframe befindet (nur wo er angefangen hat, via src).

So jetzt bin ich in der Welt von XSS und alle sicherheitsrelevanten Bedenken.

Verwenden von Javascript Ich habe 'Zurück' und 'Vorwärts' Schaltflächen mit dem Verlaufsobjekt von Links in der Eltern hinzugefügt (wenn ein Benutzer eine Suche die Ergebnisse in den Iframe laden, so ermöglicht die Zurück-Taste ihnen zu gehen zurück zum primären Standort, nachdem sie die Suchresultate benutzt/durchgesehen haben).

Gibt es eine Möglichkeit, den aktuellen Ort innerhalb des Iframe aufzurufen und die Seite (jetzt ohne Rahmen) an diesen Ort zu laden?

Ich habe PHP $ GLOBAL/$ _ SERVER-Variablen überprüft, um zu sehen, ob ich Glück haben könnte. Ich verstehe, dass es Sicherheitsbedenken gibt, aber ich sehe nicht, wie diese bestimmte Funktion anders als history.back() sein würde, wo der Browser den Anruf selbst macht, ohne meinen Elternrahmen zu "benachrichtigen".

Ich weiß, ich kann den src-Standort aus dem iframe selbst abrufen, aber natürlich setzt der Benutzer nicht über diese Seite navigieren, und wenn sie es tun sie nichts dagegen, ihren aktuellen Standort verloren und zurückgeleitet zu Seite anfänglich vom Rahmen aufgerufen (... ah ...).

Es scheint fast wie Frames sind entworfen, um Fenster zu stehlen mit keine Mittel für anmutig "ausbrechen" und Integrität der Benutzersitzung zu erhalten.

Kein Wunder, dass Menschen sie hassen. :)

+0

ich bin nicht sicher, ob ich das richtig verstanden. Sie sind in der Steuerung des Hauptdokumentes, Sie Anzeige externe Dokumente in einem iframe, und Sie möchten, dass das Hauptdokument den Inhalt des iframes als neues Hauptdokument lädt, und Sie haben keine Zusammenarbeit mit den Dokumenten in den iFrames? – Jim

Antwort

2

Bei Google Bildersuche, wenn Sie den Rahmen entfernen, funktioniert es wie Sie derzeit vorschlagen, indem Sie zur ursprünglichen Frame-Quelle zurückkehren. Aus XSS-Gründen sollte das Auffinden des aktuellen Standorts nicht möglich sein, und wenn dies der Fall wäre, würde dies als Fehler angesehen und in nachfolgenden Browser-Patches behoben werden. Daher ist es möglicherweise nicht das Beste, sich auf eine solche Eigenart zu verlassen. Ein Weg, elegant auszubrechen, ohne die Position zu enthüllen, wäre jedoch nett. Dies könnte etwas sein, das Sie der Gruppe HTML5 vorschlagen können.

0

Nicht, dass es wirklich sehr hilfreich wäre, aber das nächste, was Sie kommen können, ist festzustellen, ob jemand tatsächlich die ursprüngliche Frame-Quellseite verlassen hat. Wenn Sie in einem Frame navigieren, werden die Einträge im Verlaufsobjekt gespeichert, und wenn Ihre ursprüngliche Verlaufslänge beim Laden der Seite größer als die Verlaufslänge ist, wenn jemand auf "Aus diesem Frame ausbrechen ..." klickt, wissen Sie, dass sie im Frame gesucht haben .

0

Ich schätze sowohl Sie (hal10001) und Zach nehmen sich die Zeit zu beantworten. Es scheint, dass ich (wie ich vermutete) wegen der XSS-Sicherheitsbedenken saugen.

Ich nehme an, ich könnte einfach alle den Inhalt in einem PHP-basierten Proxy, aber das würde deutlich in die gruselige Zone, ganz zu schweigen von der zusätzlichen Latenz und was nicht.

Ich werde weiter die Idee drehen, in dem Fall ich etwas gesund und brauchbar finden, aber bis dahin denke ich, ich werde nur die etwas weniger freundliche Ansatz der Förderung der ursprünglichen Rahmen und löschen ihre aktuelle Position (und wenn sie weiß nicht, wie kann ich die iframe/Symbolleiste Situation erneut.

nochmals vielen Dank!