Ich verwende postMessage
, um Ereignisse von einem iframe zu seinem übergeordneten Dokument zu senden. Ich habe die Kontrolle über beide Seiten, aber der Inhalt kommt aus zwei verschiedenen Bereichen.Crossdomäne postMessage, identifizieren iFrame
Mein einfaches Problem ist, dass ich nicht die iFrame identifizieren können in der es Eltern Callback-Methode ist. Die Implementierung sieht wie folgt aus:
Im iFrame:
parent.postMessage(JSON.stringify({action: "closeView" }),'*');
In dem übergeordneten Fenster:
window.addEventListener('message',function(event) {
if(event.origin !== 'https://example.com')
return;
// Parse message back to json
var messageObject = JSON.parse(event.data);
var source = event.source;
/* this is returning: Window -URL- */
console.log(source);
/* This will throw Permission denied, although this code is inside of "parent" */
console.log(source.parentNode);
},false);
Ich möchte ein bestimmtes übergeordnetes Element des iframe identifizieren, die befindet sich (logisch) innerhalb des übergeordneten Dokuments.
Wenn ich versuche, event.source.parentNode
oder einige jQuery auf dem Objekt zu verwenden, sagt Firefox, ich kann diese XSS nicht tun, um zu verhindern, Fehler: Error: Permission denied to access property 'parentNode'
Wie kann ich das übergeordnete Element des iFrame erhalten, dass die ausgelöste postMessage
Ereignis-Listener?
Sie haben recht, vielen Dank. Erhalten Sie nur 'window.name' innerhalb der'
Das ist so ein direkter Ansatz. Sie könnten sogar die Namen auf dem Server mit einem eindeutigen Schlüssel automatisch generieren - so müssten Sie sich nicht einmal um die Verschmutzung durch Fenster/Tabs sorgen. –