XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Javascript & Ajax (http://xhtmlforum.de/forumdisplay.php?f=83)
-   -   Standarisiertes API für postMessage/onmessage? (http://xhtmlforum.de/showthread.php?t=71004)

MitjaStachowiak 29.05.2014 18:09

Standarisiertes API für postMessage/onmessage?
 
Hallo,

ich arbeite an einer Komponente, die ermitteln soll, ob z.B. ein IFrame angeklickt wurde. Wenn die Seite im Frame von einer anderen Domain kommt, wird das mousedown-Event nicht ausgelöst.

Die fremde Seite könnte höchstens per postMessage mitteilen, dass sie angeklickt wurde. Solange nur gesendet wird, dass die Seite angeklickt wurde, aber nicht die Koordinaten o.ä., sollte das kein Sicherheitsrisiko sein.

Die Frage ist: Hat inzwischen jemand ein standarisiertes API entworfen, das ausgewählte Informationen zwischen einander unbekannten Seiten austauschen kann?

Weil dann würde ich mich natürlich beim Entwurf dieser Komponente daran halten.

MitjaStachowiak 11.06.2014 21:22

So, ich habe die fragliche Komponente entwickelt: mitjastachowiak.de/?/Projects/JSLib/FrameCommunicator

David 12.06.2014 14:48

Nicht schlecht. Jetzt fehlt noch eine Lizenz und, dass du es auf Github hostest ;)

MitjaStachowiak 12.06.2014 16:22

Achja - die Lizenz vergesse ich immer. Aber für Quelltexte, die ich explizit hochlade und auf meiner Homepage dokumentiere, verwende ich eigentlich immer Public Domain. Habe ich eben noch ergänzt, danke 8)

Mit Github habe ich mich noch nicht beschäftigt. Muss ich mal machen.

Es ist auch noch nicht 100%ig fertig, diese frameübergreifenden Geschichten werden erfahrungsgemäß immer komplexer, als man gedacht hat. Hier zum Beispiel gibt es das Problem, dass man in Webkit nicht erkennen kann, ob sich die Seite im Frame geändert hat. Also man bekommt ja nur das onload-Event mit, aber die Seite kann ja schon vor dem Onload ihre Größe gepostet haben, aber man weiß dann nicht, ob das wirklich schon die neue Seite war, oder doch noch die alte. Ich muss deswegen beim onload des Frames in Webkit die alten Daten löschen. Denn das iframe.contentWindow bleibt das gleiche. In allen anderen Browsern funktioniert noch der Trick, nicht contentWindow. sondern contentWindow.postMessage zu vergleichen.
Code:

if (iframe.contentWindow.postMessage != currentSite) alert('Das Dokument im Frame hat sich geaendert!');
 currentSite = iframe.contentWindow.postMessage;

Nur in Webkit bleibt auch diese Methode identisch :x

MitjaStachowiak 15.06.2014 15:48

Ahaa, man nehme statt iframe.contentWindow.postMessage einfach iframe.contentWindow.location als Vergleichsobjekt. Dann dud's :D [Edit] In Webkit...

Ich dachte, location wäre durch die same-origin-policy gesperrt, aber es wird nur z.B. das lesen von location.href verboten.

Naja, jetzt habe ich eine komplizierte Hirachie an Abfragen gebaut, mit der man feststellen kann, ob die Seite im Frame noch die gleiche ist. Nur im IE geht es nicht immer :roll:


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:26 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023