http://codemirror.net/doc/manual.htmlから、私はgetRange()
、undo()、redo() などしか見つけられず、試してみると、cut()、copy()、および貼り付け API などが見つかりません。を実行するeditor.execCommand("cut")
と、エラーが発生します。私たちを手伝ってくれますか?ありがとう!
3 に答える
clipboard.jsを使用しtext()
て、CodeMirror の内部ドキュメントの値を取得する関数を定義できます。
<textarea>
便宜上、( ) エディターのセレクターへの参照を保存します。
var editorSelector = '#editor' // or '#editor + .CodeMirror';
ClipBoard
ボタンを参照して新しいオブジェクトをインスタンス化します。
new Clipboard('.clip-btn-native', {
text: function(trigger) {
return getCodeMirrorNative(editorSelector).getDoc().getValue();
}
});
CodeMirror
ネイティブ JavaScript を介してインスタンスを取得します。
function getCodeMirrorNative(target) {
var _target = target;
if (typeof _target === 'string') {
_target = document.querySelector(_target);
}
if (_target === null || !_target.tagName === undefined) {
throw new Error('Element does not reference a CodeMirror instance.');
}
if (_target.className.indexOf('CodeMirror') > -1) {
return _target.CodeMirror;
}
if (_target.tagName === 'TEXTAREA') {
return _target.nextSibling.CodeMirror;
}
return null;
};
デモ
完全を参照してください。JSFiddleでの詳細なデモ。
ブラウザーのセキュリティ制限により、JavaScript がプログラムからクリップボードにアクセスすることが禁止されているため、切り取り/コピー/貼り付け用の CodeMirror API はありません。貼り付けはプライベート データを盗むために使用される可能性があり、カット/コピーはより精巧な攻撃ベクトルとして使用される可能性があります。
ブラウザー独自のネイティブ コードは、現在選択されているテキストまたはフォーカスされたテキスト フィールドのみに基づいて、クリップボード (キーボード ショートカットおよびコンテキスト メニュー項目) にアクセスするユーザージェスチャを処理します。
この SO スレッドには、これらの制限を回避する試みの優れた要約があります。CodeMirror のアプローチは最初の弾丸です。非表示のテキストエリアを使用して、ユーザーのクリップボード ジェスチャが確実に機能するようにしますが、それでもプログラム API はサポートされません。
ただし、部分的な回避策があります。小さな Flash ウィジェットを使用します (これは上記スレッドの 2 番目の箇条書きです)。Flashは、コピー/切り取り (貼り付けは除く)の制限を少し緩和します。なんらかのユーザー イベントによってトリガーされる必要がありますが、HTML UI のボタンをクリックするようなものかもしれません。ZeroClipboardやClippyなどのラッパーを使用すると、Flash の知識がなくてもこれらの機能に簡単にアクセスできます。コピー時に CodeMirror から適切な文字列を取得するには、少しグルー コードを記述する必要がありますが、それほど悪くはありません。