Wie kommuniziert man zwischen Frames?
Pflege ich eine Anwendung, die geht so in der Art wie dieses:
Gibt es eine Seite mit Einem Frame, der zeigt die Seite B. Seite B ist Teil eines völlig anderen Produkts in einer separaten Domäne.
Nun, Sie wollen, dass, wenn eine option in B geklickt wird, wird die GANZE Seite auf eine andere Seite weitergeleitet, in A. Das problem ist, dass die url Einer ist so etwas wie www.client.A.com/Order/Details/123
und wenn wir auf in werden es sollte eine Weiterleitung, um so etwas wie www.client.A.com/Order/Edit/123
aber B weiß nichts von A. weiß Es gar nicht, die Bestellnummer ist derzeit ausgewählt ist, oder etwas über A. Seite Eine, die hat den Rahmen B es weiß.
Denn nun meine Lösung ist, einfach umleiten auf die AllOrders so etwas wie client.MyCompany/Bestellungen
aber da B nicht weiß, welche client
ruft ihn (es ist ein multi-tenant-app), werde ich es in der webconfig. (also jeder client hat seine eigenen webconfig mit einem anderen Wert).
Ich nicht finden diese Lösung optimal, aber ich kann nicht an nichts anderes denken! Ich habe bereits versucht, indem Sie die benötigte url in Eine Seite in einem versteckten Div (seit Einer kennt Sie alle info) und dann zu versuchen, Lesen Sie den ganzen DOM der Seite von B, es zu finden.... leider kann ich nur erhalten Sie Zugriff auf Bild B ist der DOM... (ich habe versucht, mit jquery).
Ich weiß, frames sind böse, aber das ist, wie es geschrieben ist... irgendwelche Ideen?
Dank!
InformationsquelleAutor der Frage Francisco Noriega | 2010-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die übergeordnete Seite und der iframe-Seite B in verschiedenen Domänen befinden, werden Sie nicht in der Lage sein, um auf Methoden oder Felder über B ist parent-Eigenschaft, noch Skript in der Lage zu erreichen, in B Inhalt, noch werden Sie in der Lage sein zu teilen, Globale Variablen zwischen A und B. Diese Grenze gesetzt zwischen Seite A und Seite B ist ein wichtiger Bestandteil des browser-Sicherheitsmodell. Es ist, was verhindert, dass evil.com von der Verpackung Ihrer online-Banking-web-Seite und Diebstahl Ihrer account-info nur durch Lesen der internen Variablen vom javascript des bank-web-Seite.
Wenn Sie den Luxus haben, dass die neueste generation von Browsern, die Sie verwenden können, die postmessage-Technik schon in einem der anderen Antworten hier. Wenn Sie brauchen, um die Unterstützung für ältere Browser, die Sie möglicherweise in der Lage, passieren kleine Mengen von Informationen, verwenden von cross-domain-client-scripting-Techniken im browser. Ein Beispiel HIERFÜR ist die Verwendung von iframes zu kommunizieren, Informationen zwischen der äußeren Seite und der inneren Seite B. Es ist nicht einfach, und es gibt viele Schritte, aber es kann getan werden. Ich schrieb einen Artikel auf dieses eine Weile her.
Werden Sie nicht in der Lage sein zu überwachen Klicks in B ' s iframe aus der übergeordneten Seite A. Das ist ein Verstoß gegen browser-Sicherheits-policies auf mehreren Ebenen. (Klicken Sie auf die Entführung, für die eine) Sie werden nicht in der Lage, um zu sehen, wenn B die URL ändert sich - Ein schreiben an den iframe.src-Eigenschaft auf den URL ändern, aber sobald das iframe.src-Punkte zu einer anderen Domäne als der Domäne, kann nicht mehr Lesen, den iframe.src-Eigenschaft.
Wenn A und B sind in unterschiedlichen sub-domains von der gleichen root-Domäne ist, wird möglicherweise eine Gelegenheit, "tiefer" mit der domain zu einem gemeinsamen Stamm. Zum Beispiel, wenn die äußere Seite, die gehostet wird in subdomain A.foo.bar.com und B wird gehostet in subdomain foo.bar.com dann senken Sie die Domäne in Seite A zu foo.bar.com (durch Zuordnung von Fenster.domain = "foo.bar.com" in Einer Schrift). Seite A verhält sich dann wie ein peer von Seite B und die beiden können dann auf die jeweils anderen Daten Bedarf, auch wenn Eine technisch serviert aus einer anderen Domäne als B. schrieb ich einen Artikel über domain-Tieferlegung auch.
Domain-Senkung kann nur peel off innersten subdomains zu betreiben, im Rahmen einer root-Domäne. Sie können nicht ändern, A.foo.bar.com zu abc.com.
Es ist auch ein leichtes Risiko für die Senkung der Domänen zu einer gemeinsamen root-Domäne. Wenn Sie Ihre Seite in Ihre eigene subdomain, Ihre html-und script sind getrennt von den anderen subdomains aus dem gemeinsamen root-Domäne. Wenn ein server in einer der anderen subdomains kompromittiert ist, ist es nicht wirklich beeinflussen Ihre html-Seite.
Wenn Sie senken Ihre Seite domain zum gemeinsamen root-Domäne, Sie setzen Ihre Interna zu script läuft auf dem gemeinsamen root-Domäne und Skript von anderen subdomains, die hat auch senkte seine domain auf die gemeinsame Wurzel. Wenn ein server in einer der anderen subdomains gefährdet ist, haben Sie Zugang zu Ihrem Skript-Interna und daher möglicherweise gefährdet Ihre subdomain als gut.
InformationsquelleAutor der Antwort dthorpe
Fall, dass die Seite & Frames werden nicht in derselben Domäne befinden, müssen Sie die postmessage als die gleichen-domain-policy verbietet den normalen javascript-Kommunikation zwischen den Seiten/frames von verschiedenen domains aus Sorge um die Sicherheit.
postmessage ist Teil von html5 und funktioniert in allen modernen Browsern (einschließlich IE8). wenn Sie benötigen support für ältere Browser (specifally IE6/7), könnten Sie die jQuery postmessage-plugin (transparent fällt zurück auf einige schöne hash-tag-Tricks für ältere Browser).
und nebenbei: nicht sicher, ob frames sind böse, es gibt einige Probleme (usability, SEO, ...) im Zusammenhang mit Ihnen, aber ich habe einige nachforschungen und die meisten von Ihnen können in Angriff genommen werdendenke ich.
InformationsquelleAutor der Antwort futtta
Wenn Sie möchten, um die Kommunikation zwischen frames in javascript, die Sie verwenden können, 'parent':
Wenn frame hat eine variable Wert, wie zB:
Für Rahmen-B-es zu Lesen, es wäre zu entnehmen
(vorausgesetzt, dass der frame der erste frame deklariert)
So können Sie einrichten Globale Variablen innerhalb der einzelnen Rahmen, der andere Rahmen können Lesen und daher können Sie die Reihenfolge # altmodische javascript (nie versucht, es in jquery).
Wow-frames - hätte nie gedacht, ich würde denken, über Sie wieder.
InformationsquelleAutor der Antwort amelvin