Domanda

Sto scrivendo un'estensione nicEdit che saranno la causa di tutti incollato testo rtf per essere incollato come testo normale.Il mio codice funziona perfettamente con Chrome e IE7, ma non funziona in Firefox 3 (e, presumibilmente, Firefox 2, ma, per motivi diversi, in particolare, la mancanza di una pasta di evento).

Lo strano è che il mio codice funziona perfettamente quando il testo viene incollato è testo normale.Sembra di soffocare qualsiasi tipo di formattazione.Ecco i passaggi coinvolti nella versione di Firefox, che vengono sparati su incolla (l'evento è sparare, ma l'operazione non viene eseguita):

  • Ottenere la selezione corrente e gamma
  • Creare un nuovo div con contentEditable = true, e aggiungere alla DOM
  • Spostare il punto di inserimento del nuovo div
  • impostare un timeout per ottenere il codice HTML dal nuovo div, pulire e mettere nella vecchia selezione (che ho preso nel passaggio 1)
  • return true (che consente l'originale incolla per completare, si incolla il contenuto nella nuova div)

Sembra che tutte queste operazioni vengono eseguite, ma la pasta non succede mai.Ricevo errori nella console (solo di un avviso relativo a un errore di analisi su text-align - la dichiarazione di caduta), e nulla di sospetto succede quando faccio il debug con Firebug (tranne che il mio incollare sembra vuoto, che è il problema).

L'avviso mi fa pensare che Firefox può essere in grado di analizzare il contenuto ho incollare, ma senza il mio intercettare il codice, io sono in grado di incollare la nicEditor bene.

Ho caricato il mio Firefox-solo script di test a http://www.ryankinal.com/paste/firefox.html - questo è il codice che Firefox viene eseguito dalla mia piena estensione.

Un paio di cose da notare:

  • Ho preso una discreta quantità di ispirazione da TinyMCE incolla plugin
  • Sto utilizzando alcuni jQuery per la selezione di elementi
  • Ci sembra anche essere qualche modifica al Function.prototype in nicEdit, che trovo strano
  • Potrei usare un altro Editor di Testo rtf, ma considerare questo un esercizio di debug
  • Il codice linkato sopra è inteso SOLO PER FIREFOX
È stato utile?

Soluzione

Il problema è che la pasta evento è semplicemente troppo tardi per reindirizzare il cursore in alcuni browser, tra cui Firefox.Sarete in grado di fare il punto di inserimento-redirect trucco se si intercetta le scorciatoie da tastiera per incollare (Ctrl+V, Cmd+V e Shift+Inserire) e ignorare la pasta di eventi, ma questo significa paste innescato dal contesto e modificare i menu non sono coperti.Penso che questo è il meglio che puoi fare, però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top