2017-12-23 20 views
0

Firefox用のWebExtensionを作成しています。その中で、WebExtensionとクリップボードの間で任意のテキストをコピーできるようにしたい。私がドキュメント(https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard)から見ることができる限り、javascript変数とクリップボードの間でデータを転送する方法はありません。DOM要素を迂回する必要があるようです。私はその後、Webextension:クリップボードのテキストを入力要素に貼り付けることができません

でそれを呼び出すことができます Firefox webextension not copying to clipboard

function copy(contentToCopy) { 
    var txtToCopy = document.createElement('input'); 
    txtToCopy.style.left = '-300px'; 
    txtToCopy.style.position = 'absolute'; 
    txtToCopy.value = contentToCopy; 
    document.body.appendChild(txtToCopy); 
    txtToCopy.select(); 

    console.log("Copying ", txtToCopy.value); 
    var res = document.execCommand('copy'); 
    console.log("Copy result ", res); 

    txtToCopy.parentNode.removeChild(txtToCopy); 
} 

:クリップボードにテキストをコピーするための

は、私はこの質問に記載されているものと非常に似てダミー方法を作ってみました

copy('any arbitrary text'); 

と完全に動作します。

しかし、私も同じようにクリップボードの内容にアクセスする必要がある、それが仕事を得ることはできません。

function paste() { 
    var txtToPaste = document.createElement('input'); 
    txtToPaste.style.left = '-300px'; 
    txtToPaste.style.position = 'absolute'; 
    txtToPaste.value = 'dummy content for debugging'; 
    document.body.appendChild(txtToPaste); 
    txtToPaste.focus(); 
    txtToPaste.select(); 

    var res = document.execCommand('paste'); 
    var result = txtToPaste.value; 
    console.log("Paste result ", res); 
    console.log('Pasted text', result); 
    console.log('txtToPaste', txtToPaste); 

    txtToPaste.parentNode.removeChild(txtToPaste); 

    return result; 
} 

私は私のmanifest.jsonをファイルに適切なアクセス権をも要求しています

"permissions": ["clipboardRead" ] 

私は、このようなメソッドを呼び出そう:

var dataFromClipboard = paste(); 

しかし、ないマット「貼り付け結果」は常に「真」であり、「結果」は「デバッグのためのダミーコンテンツ」である(すなわち、私がダミーフィールドを初期化するために使用したものと同じ)。

Windows 7(64ビット)のFirefox 57.0.2(64ビット)でこれをテストしています。

明らかなものがありませんか?なぜこれはある方向では機能しますが、他の方向では機能しませんか?

JavaScriptコンソール(拡張機能がテストされているタブでもグローバルブラウザコンソールでもない)はエラーを表示していません。

答えて

0

https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard#Reading_from_the_clipboardをもう一度見ると、「ブラウザ固有の考慮事項」というセクションがあります。私はリードスルー私の最初にそれを逃した理由を私は知らないが、それは解決策を提供します:

Firefoxはバージョン54から「clipboardRead」権限をサポートしていますが、content editable modeの要素を必要と 行い、コンテンツのどの スクリプトはaとしか動作しません。 ;メソッドの動作これらの変化(のcontentEditableを設定入力にテキストエリアを変更)して

function paste() { 
    var txtToPaste = document.createElement('textarea'); 
    txtToPaste.id = "txtToPaste"; 
    txtToPaste.style.left = '-300px'; 
    txtToPaste.style.position = 'absolute'; 
    txtToPaste.contentEditable = true; 
    txtToPaste.textContent = ''; 
    document.body.appendChild(txtToPaste); 
    txtToPaste.focus(); 
    txtToPaste.select(); 

    var res = document.execCommand('paste'); 
    var result = txtToPaste.textContent; 
    console.log("Copy result ", res); 
    console.log('Pasted text', result); 
    console.log('txtToPaste', txtToPaste); 

    txtToPaste.parentNode.removeChild(txtToPaste); 

    return result; 
} 

を次のようにこの知識を、私は私の機能を変更した

私が望んでいたように。

関連する問題