Question

J'écris une extension NicEdit qui entraînera tout le texte riche collé à coller en texte brut. Mon code fonctionne parfaitement dans Chrome et IE7, mais échoue dans Firefox 3 (et, probablement, Firefox 2, mais pour des raisons différentes - notamment, l'absence d'un événement paste).

La partie étrange est que mon code fonctionne parfaitement lorsque le texte étant collé est le texte brut. Il semble étouffer toute mise en forme. Voici les étapes impliquées dans la version de Firefox, qui sont sur la pâte mis le feu (l'événement se déclenche, mais la pâte échoue):

  • Obtenez la sélection actuelle et la gamme
  • Créer une nouvelle div avec contentEditable = true, et l'ajouter au DOM
  • Déplacez le curseur à la nouvelle div
  • définir un délai pour obtenir le code HTML de la nouvelle div, le nettoyer et le mettre dans l'ancienne sélection (que je saisis à l'étape 1)
  • return true (permettant la pâte originale pour compléter, le contenu de coller dans la nouvelle div)

Il semble que toutes ces étapes sont exécutées, mais la pâte ne se reproduise jamais. Je reçois aucune erreur dans la console (juste un avertissement relatif à une erreur d'analyse sur text-align - la déclaration est abandonnée), et rien ne se passe suspect quand je débogage avec Firebug (sauf que ma pâte semble vide, ce qui est le problème)

L'avertissement me fait penser que Firefox peut juste être incapable d'analyser le contenu que je suis coller, mais sans mon code d'interception, je suis en mesure de coller dans le nicEditor très bien.

Je l'ai téléchargé mon script de test Firefox uniquement à http://www.ryankinal.com /paste/firefox.html - c'est le code que Firefox exécute de mon extension complète

.

Un couple de choses à noter:

  • J'ai pris une bonne dose d'inspiration du plugin pâte TinyMCE
  • J'utilise une jQuery pour la sélection des éléments
  • Il semble aussi être une modification dans Function.prototype NicEdit, que je trouve bizarre
  • Je pourrais utiliser un autre éditeur de texte enrichi, mais considérer cela comme un exercice dans le débogage
  • Le code lié ci-dessus est destiné UNIQUEMENT POUR FIREFOX
Était-ce utile?

La solution

Le problème est que l'événement de la pâte est trop tard pour rediriger le caret dans certains navigateurs, y compris Firefox. Vous serez en mesure de faire l'affaire caret-redirect si vous intercepter des raccourcis clavier pour coller ( Ctrl + V , Cmd + V et Maj + Insérer ) et ignorer l'événement de la pâte, mais cela signifie que les pâtes déclenchées par les menus contextuels et modifier ne sont pas couverts. Je pense que c'est le meilleur que vous pouvez faire, cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top