Frage

Ich schreibe eine Erweiterung nicEdit , die alle eingefügten Rich Text verursachen wird als normaler Text eingefügt werden. Mein Code funktioniert perfekt in Chrome und IE7, aber nicht in Firefox 3 (und vermutlich Firefox 2, aber aus unterschiedlichen Gründen - vor allem, das Fehlen einer Paste Ereignisse).

Der ungeradee Teil ist, dass mein Code funktioniert perfekt, wenn der Text eingefügt wird Klartext ist. Es scheint auf jede Formatierung zu ersticken. Hier sind die Schritte in der Firefox-Version beteiligt, die der Paste gebrannt werden (das Ereignis feuert, aber die Paste nicht):

  • Rufen Sie die aktuelle Auswahl und Reichweite
  • Erstellen Sie ein neues div mit contentEditable = true, und fügen Sie es dem DOM
  • Bewegen Sie den Cursor an die neue div
  • set einen Timeout den HTML-Code aus dem neuen div zu bekommen, reinigen und es in die alte Auswahl setzen (was ich in Schritt 1 packte)
  • return true (so dass die ursprüngliche Paste vervollständigen, Einfügen von Inhalten in das neue div)

Es scheint, dass alle diese Schritte ausgeführt werden, aber die Paste nie passiert. Ich bekomme keine Fehler in der Konsole (nur eine Warnung an einen Parse-Fehler auf text-align beziehen - die Erklärung fallen gelassen wird), und nichts Verdächtiges passiert, wenn ich mit Firebug zu debuggen (außer, dass meine Paste leer scheint, das ist das Problem)

Die Warnung läßt mich denken, dass Firefox nur nicht in der Lage sein kann, den Inhalt zu analysieren Ich habe Einfügen, aber ohne meinen Intercept-Code, ich bin in der Lage in die nicEditor einfügen gut.

Ich habe meine Firefox-only Testskript unter http://www.ryankinal.com hochgeladen /paste/firefox.html - das ist der Code, dass Firefox führt eine von meiner vollen Erweiterung

.

Ein paar Dinge zu beachten:

  • Ich habe eine ganze Menge Inspiration aus der TinyMCE genommen einfügen Plugin
  • Ich bin etwas jQuery für Elementauswahl mit
  • Es scheint auch einige Änderungen an Function.prototype in nicEdit zu sein, was ich seltsam
  • finden
  • ich einen anderen Rich-Text-Editor verwenden können, aber betrachten diese eine Übung bei der Fehlersuche
  • Der obige Code verknüpft ist nur für FIREFOX
War es hilfreich?

Lösung

Das Problem ist, dass die Paste Ereignis einfach zu spät ist, um die caret in einigen Browsern, darunter Firefox zu umleiten. Sie werden in der Lage, die caret-redirect Trick zu tun, wenn Sie abfangen Tastenkombinationen zum Einfügen ( Strg + V , Cmd + V und Umschalttaste + Einfügen ) und die Paste Ereignis ignorieren, aber dies bedeutet, Pasten durch den Kontext und bearbeiten von Menüs ausgelöst werden nicht abgedeckt. Ich denke, das ist das Beste was Sie tun können, aber.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top