9

http://codemirror.net/doc/manual.htmlから、私はgetRange()、undo()、redo() などしか見つけられず、試してみると、cut()、copy()、および貼り付け API などが見つかりません。を実行するeditor.execCommand("cut")と、エラーが発生します。私たちを手伝ってくれますか?ありがとう!

4

3 に答える 3

13

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での詳細なデモ。

于 2015-10-17T04:10:06.623 に答える
4

ブラウザーのセキュリティ制限により、JavaScript がプログラムからクリップボードにアクセスすることが禁止されているため、切り取り/コピー/貼り付け用の CodeMirror API はありません。貼り付けはプライベート データを盗むために使用される可能性があり、カット/コピーはより精巧な攻撃ベクトルとして使用される可能性があります。

ブラウザー独自のネイティブ コードは、現在選択されているテキストまたはフォーカスされたテキスト フィールドのみに基づいて、クリップボード (キーボード ショートカットおよびコンテキスト メニュー項目) にアクセスするユーザージェスチャを処理します。

この SO スレッドには、これらの制限を回避する試みの優れた要約があります。CodeMirror のアプローチは最初の弾丸です。非表示のテキストエリアを使用して、ユーザーのクリップボード ジェスチャが確実に機能するようにしますが、それでもプログラム API はサポートされません。

ただし、部分的な回避策があります。小さな Flash ウィジェットを使用します (これは上記スレッドの 2 番目の箇条書きです)。Flashは、コピー/切り取り (貼り付けは除く)の制限を少し緩和します。なんらかのユーザー イベントによってトリガーされる必要がありますが、HTML UI のボタンをクリックするようなものかもしれません。ZeroClipboardClippyなどのラッパーを使用すると、Flash の知識がなくてもこれらの機能に簡単にアクセスできます。コピー時に CodeMirror から適切な文字列を取得するには、少しグルー コードを記述する必要がありますが、それほど悪くはありません。

于 2013-04-24T09:59:30.320 に答える