Lieber Mathias,
ich gebe zu, momentan gibt es ein paar verwirrende Fakten. Daher kläre ich das weiter auf.
Es gibt eine allgemeine TinyMCE-Doku und darin soll eine spezifische Doku für dein CMS drinstehen.
Nein, leider. Es gibt eben keine offizielle In-Editor-Hilfe-Doku. Das ist ein Manko von TinyMCE. In der 2er-Version gab es eine rudimentäre Hilfe, bei der im Wesentlichen die Buttons rudimentär erklärt wurden. In der 3er-Version ist das völlig entfallen.
Für mein CMS habe ich nun längst auf die 3er-Version umgestellt, habe aber über mein eigenes Plugin die Funktionalität der In-Editor-Hilfe-Doku beibehalten, da ich sie modifiziert und sehr stark erweitert hatte. Dadurch habe ich sie aber auch auf mein CMS maßgeschneidert.
Bei einer technischen Problemstellung habe ich einen der Entwickler mein CMS ausprobieren lassen. Er fand diese (z.T. sogar kontextsensitive) Hilfe im Editor gut und überlegte, inwiefern man soetwas wohl als offizielle Doku anbieten könnte - vielleicht sogar auf Wiki-Basis...
Hier nun setze ich an. Zu Testzwecken habe ich meinen privaten Webspace (felix-riesterer.de) mit einer "offiziellen" Doku angereichert, denn bei Moxiecode gibt es (noch) keine solche. Es gibt dort ein Wiki mit Seiten zur Konfiguration, einigen how-to Artikeln und einer recht anständigen Dokumentation zur API des TinyMCE.
Deshalb ist die allgemeine Doku irgendwie lückenhaft, sodass du manche Links quasi on-the-fly auf deinen Webspace umbiegen willst. Richtig verstanden soweit?
Das hast Du richtig verstanden. Meine Idee ist, dass die offizielle Doku eine Grundlage bildet. Sollte ein Entwickler für seine Editor-Implementation Seiten daraus für seine Zwecke modifiziert haben, so legt er diese (und nur diese!) in seinem Webspace innerhalb seiner TinyMCE-Installation ab, sodass diese anstelle der offiziellen Seiten angezeigt werden. Deshalb die Prüfung auf Vorhandensein.
Das kannst du natürlich auf Seite des Anwenders mit reinem JavaScript lösen - wenn du denn diese Dokumentation entsprechen anpassen kannst.
Soweit war ich schon. Der Transfer von der eigenen zur offiziellen Dokuseite ist kein Problem. Hier kann ich mit AJAX das Vorhandensein erfolgreich prüfen, um bei Nichtvorhandensein auf die entsprechende Seite der "offiziellen" Doku weiterzuleiten.
Ich wüsste gar nicht, wo da jetzt Cross-Domain-Requests sind? Abfragen, ob auf der selben Domain eine bestimmte URI liegt. Wenn nicht, dann weiterleiten auf felix-riesterer.de/irgendwas. Oder willst du zusätzlich prüfen, ob die Datei auf felix-riesterer.de vorhanden ist?
Nein, umgekehrt. Sagen wir, der User hat gerade eine von mir angepasste Dokuseite im Hilfefenster (<iframe>). Daraufhin klickt er einen Link zu einer weiteren Seite an, die ich nicht modifiziert habe, da die offizielle Hilfeseite an dieser Stelle mit meiner Editor-Implementierung zusammenpasst. Also existiert die Seite bei mir nicht, und der User müsste die entsprechende Seite aus der "offiziellen" Doku laden. Soweit auch kein Problem, da ja jede Seite, die nicht auf dem eigenen Webspace liegt, automatisch auf dem Server der offiziellen Doku liegen muss (oder der Entwickler hat einen "toten Link" in der Doku eingebaut).
Das echte XSS-Problem besteht nun darin, dass die Links auf der Seite der offiziellen Doku wieder zurück auf meinen Webspace führen müssen, damit weitere von mir eventuell modifizierten Seiten anstelle der offiziellen Version geladen werden können. Da aber das jeweilige Vorhandensein der Hilfeseiten auf dem eigenen Webspace aus einem offiziellen Dokument heraus wegen XSS nicht per XHR überprüft werden kann, landet der User im Zweifelsfalle auf einer 404er Fehlerseite (bei mir). Verbiegt man die Links dagegen nicht zurück zu mir, kommt der User aus der offiziellen Doku nicht mehr zu meinen angepassten Hilfeseiten zurück.
Es gäbe noch die Möglichkeit, ein Array mit URLs zu definieren, das per window.name oder so ähnlich an die offizielle Seite mitgegeben wird, sodass ein dortiges JavaScript das jeweilige Vorhandensein anhand dieser "Liste" ermitteln kann. Das wäre die einzige und zugleich unpraktischste Lösung, die mir als reine JavaScript-Lösung dazu einfällt.
Ist mein Vorhaben nun klarer geworden?
Liebe Grüße,
Felix Riesterer.
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)