2017-11-29 5 views
1

私はテキストエリア(codemirror)でカスタム確認ダイアログを使用しています。コードミラーが実際のtextarea要素を隠すので、firefoxは隠されたtextareaフィールドからデータを取得できません。確認ボックスの定義は、以下のようになります:codemirror textareaフィールドのdocument.execCommand( 'copy')がfirefoxで機能しません

var confirmationDialog = MD.ui.dialogs.confirm({ 
    title: title, 
    text: '', 
    type: 'dataUri', 
    dataUri: formUrl, 
    position: 'center', 
    buttonForward: { 
     text: 'Copy', 
     action: function() { 
      DataGridExportDialog.CopyToClipboard("#rawXmlImpExp"); 
     } 
    }, 
    buttonCancel: { 
     text: 'Cancel', 
     action: function() { 
      confirmationDialog.close(); 
      confirmationDialog.destroy(); 
     } 
    } 
}); 

私は「コピー」をクリックの上にテキストエリア内のテキストをにコピーする必要がありますように、機能をクリップボードにコピーして確認ボタンの機能を更新した要件によると、クリップボード。以下はcopyToClipboard()です。

DataGridExportDialog.CopyToClipboard = function(containerId) { 
/*var textareaData = $('#rawXmlImpExp').val(); 
var range = document.createRange(); 
range.selectNodeContents(textareaData); 
window.getSelection().addRange(range);*/ 

var copyTextarea = document.querySelector(containerId); 
copyTextarea.select(); 

try { 
    var successful = document.execCommand('copy'); 
    raiseMessage('Configuration XML copied to clip board.') 
} catch (err) { 
    raiseWarning('Unable to copy. Please do so manually.'); 
}} 

この実装はクロームで問題なく動作しますが、Firefoxでは失敗します。私のコードがFirefox上で失敗するすべてのアイデア。

+2

あなたは[この](https://stackoverflow.com/questions/30078763/how-can-i-copy-text-in-one-click-in-mozilla-firefox)を試したことがありますか? –

+0

@RoryMcCrossan:私はその質問を完了しましたが、確認ボタンにeventListenerを追加できませんでした。それについてのアイデアがあれば教えてください。 – santoshM

+0

ブラウザの互換性を確認するfirefox 41以上で 'copy/cut'をサポートしています – zabusa

答えて

0

tryブロック内のテキストエリアを非表示にして、finallyブロックに同じものを隠します。

CopyToClipboard = function(containerId) { 
    const copyTextarea = $(containerId); 
    try { 
    $(copyTextarea).css('display','block'); 
    copyTextarea[0].select(); 
    document.execCommand('copy'); 
    raiseMessage('Configuration XML copied to clip board.'); 
    } 
    catch (err) { 
    raiseWarning('Unable to copy. Please do so manually.'); 
    } 
    finally { 
    $(copyTextarea).css('display','none'); 
    } 
} 
関連する問題