Contenteditable div vs. iframe bei der Erstellung eines Rich-Text/Wysiwyg-Editors
Lesezeit: 4 Minuten
Tim Petersen
Ich versuche die Vor- und Nachteile der Verwendung von a abzuwägen <div> vs. <iframe> bei der Erstellung meines eigenen Rich-Text-/Wysiwyg-Editors.
Warum kann ich dabei nicht einfach a verwenden Inhalt editierbar<div> und warum bevorzugen so viele Menschen die <iframe> ?
Hintergrunddiskussion: Ein gängiger Weg, einen Wysiwyg-Editor zu erstellen, ist meines Wissens nach ein Div oder Iframe Inhalt editierbar und dann zu tun execCommand auf dem Dokument, das das div oder den Iframe-Körper enthält, um seinen Text fett oder was auch immer zu machen.
Es sieht so aus, als ob die meisten gut gemachten Rich-Text-Editoren einen Iframe verwenden. Während ich das leicht bekommen kann Inhalt editierbar /execCommand Combo, um an einem div/iframe in Webkit-Browsern zu arbeiten, habe ich eine höllische Zeit damit, den iframe in Firefox zum Laufen zu bringen. Ich muss auf das Laden von Skripten und Stylesheets in den iframe und allen möglichen Unsinn zurückgreifen, um zu duplizieren, was ich mit der div-basierten Version leicht erreichen kann. Also die <div>-basierte Methode scheint vorzuziehen. Gibt es starke Gründe, die ich noch einmal überdenken sollte?
mögliches Duplikat des Erstellens eines Wysiwyg-Editors
– AlfonsoML
15. April 2012 um 13:51 Uhr
Hallo AlfonsoML, danke für den Link, leider geht es nicht um den Kern der Sache, nämlich dass ich Firefox nicht so einfach zum Laufen bringen kann contenteditable in iframes. Ich möchte lieber keinen ganz anderen Codesatz erstellen, um mit diesem Browser umzugehen, und deshalb frage ich mich nur, warum ich nicht einfach ein div anstelle eines iframe verwenden kann.
– Tim Petersen
15. April 2012 um 15:06 Uhr
Außerdem ist dieser Link anderthalb Jahre alt. Die Browser haben sich seitdem ziemlich verändert und ich habe ein abnehmendes Interesse daran, ältere Browser zu unterstützen.
– Tim Petersen
15. April 2012 um 15:24 Uhr
Obwohl Sie vielleicht denken, dass der Link “alt” ist, haben sich die Browser in Bezug auf contentEditable nicht wirklich geändert. Sie verbessern es nach und nach, aber Sie benötigen immer noch eine Menge Code, damit es in allen Browsern auf die gleiche Weise funktioniert. Die Antwort von Tim Down bietet einen Überblick (sowie eine Antwort zu iframe vs. div), aber der wichtigste Teil steht am Anfang: Es richtig zu machen, kostet viel Zeit und Mühe. Wenn Sie es nicht nur zum Lernen tun möchten, sollten Sie einen der vielen vorhandenen Editoren auswählen.
– AlfonsoML
15. April 2012 um 18:02 Uhr
Mir ist klar, dass es eine Weile her ist, seit die Frage gestellt wurde, aber Ihr HTML-Code eines iframe ist fehlerhaft – der Code zwischen den
– Tomella
20. April 2014 um 16:06 Uhr
Reinmar
Zunächst einmal … Versuchen Sie nicht, Ihren eigenen WYSIWYG-Editor zu erstellen, wenn Sie an kommerzielle Nutzung denken. Es ist eine coole Idee für ein persönliches Projekt, weil man lernen kann viel, aber es wird Jahre dauern, einen Editor zu erstellen, den Sie an jemanden verkaufen können, dem es wichtig ist, ob er wirklich funktioniert und nicht nur aussieht. Ich habe kürzlich einige wirklich cool aussehende neue Editoren gesehen, aber sie funktionieren wirklich nicht. Wirklich. Und das liegt nicht daran, dass ihre Entwickler scheiße sind, sondern weil die Browser scheiße sind.
OK, das war ein tolles Intro, jetzt ein paar Fakten:
Ich bin einer der Entwickler von CKEditor.
Es wird seit etwa 10 Jahren entwickelt.
Wir haben immer noch rund 1.000 aktive Ausgaben auf unserem Trac.
Wir saugen nicht in der Webentwicklung :P.
Jetzt die Antwort – zusätzlich zu dem, was Tim Down hier zum Erstellen eines Wysiwyg-Editors geschrieben hat, können Sie lesen, was ich unter dieser Frage HTML WYSIWYG-Editor geschrieben habe: warum wird der bearbeitbare Inhalt in einen iFrame verschoben
Grundsätzlich sind Sie in einem Iframe sicherer, Sie haben das gesamte Dokument, Inhalte werden nicht aus Ihrem bearbeitbaren Element austreten, Sie können Stile verwenden usw. Es gibt auch einige Nachteile des Iframe-Ansatzes – es ist schwerer, Bootstrap-Code ist… wirklich schwierig, Sie können keine Stile der Website erben, an die der Editor angehängt ist. Ich denke, dass die Verwaltung des Fokus in diesem Fall schwieriger sein kann und Sie darauf achten müssen, in welchem Dokument Sie neue Elemente erstellen ( nur in IE<8 relevant).
Und denken Sie daran – schreiben Sie keinen eigenen Editor, es sei denn, Sie sind auf Probleme wie diesen vorbereitet
Benibur
Gründe für die iframe
Vorteile
CSS-Isolierung
Sicherheitsisolierung (Ich kann diesen Punkt nicht im Detail ausführen, ich wiederhole, was ich gelesen habe)
Nachteile
Schwerer (aber nicht zu einem signifikanten/bemerkbaren Punkt)
Schwierigerer Zugriff über JavaScript.
Persönlich habe ich meinen eigenen Editor entwickelt und ich entscheide mich dafür, ihn in ein zu integrieren iframe.
Da ein Rich-Text-Editor HTML-Tags erstellt, besteht ein Beispiel für ein Sicherheitsproblem darin, dass ein dynamisch generiertes Tag im Editor mit einem fehlenden oder falsch formatierten schließenden Tag das gesamte Dokument beschädigen könnte. Iframes lösen dieses Problem, da beschädigte Tags nichts außerhalb ihres eigenen Dokuments beeinflussen können. Reinmars Antwort unten enthält viel mehr Informationen!
– Alegscogs
13. Februar 2015 um 22:31 Uhr
11926600cookie-checkContenteditable div vs. iframe bei der Erstellung eines Rich-Text/Wysiwyg-Editorsyes
mögliches Duplikat des Erstellens eines Wysiwyg-Editors
– AlfonsoML
15. April 2012 um 13:51 Uhr
Hallo AlfonsoML, danke für den Link, leider geht es nicht um den Kern der Sache, nämlich dass ich Firefox nicht so einfach zum Laufen bringen kann
contenteditable
in iframes. Ich möchte lieber keinen ganz anderen Codesatz erstellen, um mit diesem Browser umzugehen, und deshalb frage ich mich nur, warum ich nicht einfach ein div anstelle eines iframe verwenden kann.– Tim Petersen
15. April 2012 um 15:06 Uhr
Außerdem ist dieser Link anderthalb Jahre alt. Die Browser haben sich seitdem ziemlich verändert und ich habe ein abnehmendes Interesse daran, ältere Browser zu unterstützen.
– Tim Petersen
15. April 2012 um 15:24 Uhr
Obwohl Sie vielleicht denken, dass der Link “alt” ist, haben sich die Browser in Bezug auf contentEditable nicht wirklich geändert. Sie verbessern es nach und nach, aber Sie benötigen immer noch eine Menge Code, damit es in allen Browsern auf die gleiche Weise funktioniert. Die Antwort von Tim Down bietet einen Überblick (sowie eine Antwort zu iframe vs. div), aber der wichtigste Teil steht am Anfang: Es richtig zu machen, kostet viel Zeit und Mühe. Wenn Sie es nicht nur zum Lernen tun möchten, sollten Sie einen der vielen vorhandenen Editoren auswählen.
– AlfonsoML
15. April 2012 um 18:02 Uhr
Mir ist klar, dass es eine Weile her ist, seit die Frage gestellt wurde, aber Ihr HTML-Code eines iframe ist fehlerhaft – der Code zwischen den
– Tomella
20. April 2014 um 16:06 Uhr