Heute fiel mir plötzlich ein, die Produktionsprinzipien von Rich-Text-Editoren noch einmal durchzugehen. Also fing er ohne weiteres damit an. Da ich vor einem Jahr einen einfachen Rich-Text-Editor geschrieben habe, habe ich immer noch einen gewissen Eindruck davon. Aber als ich den von mir geschriebenen Code ausführte, stieß ich auf ein Problem: Code kopieren Der Code lautet wie folgt:var ifr = document.createElement('iframe'); ifr.Breite = 300; ifr.höhe = 300; var idoc = ifr.contentDocument || ifr.contentWindow.document; idoc.designMode = "ein"; idoc.contentEditable = true; idoc.write('<html><head><style>body{ margin:0px; }</style></head><body></body></html>'); Dokument.Body.AnhängenUntergeordnetesElement(ifr); Sehen Sie sich den obigen Code an. Haben Sie Auslassungen gefunden? Ich denke, wenn es keine Freunde gibt, die ähnliche Erfahrungen gemacht haben wie ich, werden sie wahrscheinlich nicht erkennen, was mit diesem Code nicht stimmt. Dann kannst Du auch gleich eine Runde laufen gehen, vielleicht findest Du das Problem ja bald. Lassen Sie mich die Antwort unten verraten: Dieser Code löst eine Ausnahme aus, wenn das Objekt nicht gefunden wird. Welches Objekt kann nicht gefunden werden? Dokumentobjekt nicht gefunden, was? Wie kann es sein, dass das Dokumentobjekt nicht gefunden werden kann? Natürlich ist dieses Dokumentobjekt das Dokumentobjekt des Iframes. Jeder, der schon einmal mit Rich Text gearbeitet hat, weiß, dass Sie zuerst das Dokumentobjekt des Iframes abrufen müssen, bevor Sie es als bearbeitbar festlegen können. Aber warum können wir das Dokumentobjekt nicht abrufen? Ich will Sie hier nicht auf die Folter spannen. Lassen Sie mich Ihnen von meinem Lösungsprozess erzählen. Ich ging zunächst zu Google und stellte fest, dass der Weg, auf dem ich das Dokument erhalten hatte, der richtige war. Dann habe ich mich gefragt, ob es an Chrome lag? Ist es möglich, dass Chrome diese beiden Objekte nicht unterstützt? Also bin ich auf Firefox umgestiegen. Das Ergebnis ist immer noch dasselbe. Dann liegt das Problem mit Sicherheit an Ihrem eigenen Code. Als ich später den Code im Internet verglich, stellte ich fest, dass die Position meines appendChild etwas falsch war, also verschob ich es nach vorne, bis vor den Abruf des Dokumentobjekts: Code kopieren Der Code lautet wie folgt:var ifr = document.createElement('iframe'); ifr.Breite = 300; ifr.höhe = 300; Dokument.Body.AnhängenUntergeordnetesElement(ifr); var idoc = ifr.contentDocument || ifr.contentWindow.document; idoc.designMode = "ein"; idoc.contentEditable = true; idoc.write('<html><head><style>body{ margin:3px; word-wrap:break-word; word-break: break-all; }</style></head><body></body></html>'); Dadurch lief alles reibungslos. Anschließend habe ich den Fehler analysiert. Tatsächlich ist das Prinzip hinter diesem Fehler sehr einfach. Jeder weiß, dass ein Iframe tatsächlich ein anderes Dokument enthält und dieses Dokument erst nach seiner Initialisierung ein Dokumentobjekt haben kann. Wenn das Iframe-Element nicht zum DOM-Baum hinzugefügt wird, wird das Dokument im Iframe nicht initialisiert. Daher ist der contentDocument-Wert, den wir zu Beginn unseres Codes in der ifr-Variable erhalten haben, null, was bedeutet, dass das Dokument im Iframe zu diesem Zeitpunkt nicht initialisiert ist. Dieser Zeile folgend habe ich die Initialisierung anderer Knoten überprüft und festgestellt, dass andere Elementknoten nach ihrer Erstellung ihre eigenen Eigenschaften und Methoden haben, unabhängig davon, ob sie zum DOM-Baum hinzugefügt werden. Das heißt, iframe ist ein Ausreißer unter vielen Elementknoten. |
>>: Analyse der Gründe, warum MySQL-Felddefinitionen nicht null verwenden sollten
In diesem Artikel wird der spezifische Code von J...
Hauptsächlich verwendete Wissenspunkte: •CSS3 3D-...
Beziehung zwischen MySQL und MariaDB Das Datenban...
<META http-equiv="Seite eingeben" CON...
1. MHA Durch die Überwachung des Masterknotens ka...
Vorwort Die MySQL Master-Slave-Replikation ist di...
Mindmap Er sieht wahrscheinlich so aus: Die meist...
Inhaltsverzeichnis Überblick Die Rolle des Revers...
Einfach ausgedrückt besteht die verzögerte Replik...
Heute möchte ich über ein „Low-Tech“-Problem schr...
1. Installation des MySQL RPM-Pakets # Laden Sie ...
In diesem Artikel wird der spezifische Code für J...
1. Stilobjekt Das Stilobjekt stellt eine einzelne...
In diesem Artikel wird die spezifische Methode zu...
<br /> CSS-Syntax für Tabellenränder Zu den ...