0

貼り付けたすべてのリッチ テキストをプレーン テキストとして貼り付けるnicEditの拡張機能を作成しています。私のコードは Chrome と IE7 では完全に動作しますが、Firefox 3 では失敗します (おそらく Firefox 2 でも、さまざまな理由で - 特に貼り付けイベントがないため)。

奇妙な部分は、貼り付けられるテキストがプレーン テキストの場合、私のコードが完全に機能することです。どんなフォーマットでも窒息しているようです。貼り付け時に発生する Firefox バージョンに関連する手順を次に示します (イベントは発生しますが、貼り付けは失敗します)。

  • 現在の選択範囲と範囲を取得する
  • で新しい div を作成contentEditable = trueし、DOM に追加します。
  • キャレットを新しい div に移動します
  • タイムアウトを設定して、新しい div から HTML を取得し、それを消去して、古い選択 (ステップ 1 で取得したもの) に入れます。
  • true を返す (元の貼り付けを完了させ、コンテンツを新しい div に貼り付けます)

これらの手順はすべて実行されているようですが、貼り付けは行われません。コンソールにエラーは表示されず (解析エラーに関連する警告のみtext-align- 宣言が削除されます)、Firebug でデバッグしても疑わしいことは何も起こりません (問題であるペーストが空に見えることを除いて)。

この警告により、Firefox は貼り付けたコンテンツを解析できない可能性があると思われますが、インターセプト コードがなければ、nicEditor に問題なく貼り付けることができます。

Firefox 専用のテスト スクリプトをhttp://www.ryankinal.com/paste/firefox.htmlにアップロードしました。これは、Firefox が私の完全な拡張機能から実行するコードです。

注意すべき点がいくつかあります。

  • TinyMCE ペースト プラグインからかなりのインスピレーションを得ました。
  • 要素の選択にjQueryを使用しています
  • Function.prototypenicEdit にも変更が加えられているようですが、これは奇妙に感じます。
  • 別のリッチ テキスト エディターを使用することもできますが、これはデバッグの演習と考えてください。
  • 上記のリンクされたコードは、FIREFOX 専用です。
4

1 に答える 1

1

問題は、Firefox を含む一部のブラウザーでは、貼り付けイベントが単に遅すぎてキャレットをリダイレクトできないことです。Ctrl貼り付け用のキーボード ショートカット ( + VCmd+ VShift+ Insert) をインターセプトし、貼り付けイベントを無視すれば、キャレット リダイレクトのトリックを実行できますが、これはコンテキストと編集メニューによってトリガーされる貼り付けがカバーされないことを意味します。しかし、これがあなたができる最善のことだと思います。

于 2011-01-06T00:32:46.260 に答える