3

テキストをシステム クリップボードにコピーするコンテキスト メニュー オプションを作成しようとしています。

現在、ハードコードされた文字列リテラルをコピーしているだけですが、選択したテキストをコピーするように変更する方法を知りたいです。具体的には、オブジェクトを適切に作成する方法がわかりませんcreateProperties(下部を参照)

これはバックグラウンド ページでのみ実行できると理解しています。

次の背景ページがあります。

background.html

<textarea id="temp"></textarea>
<script src="context.js"></script>

context.js以下のとおりであります:

chrome.contextMenus.create({
    "title": "Freedom",
    "contexts": ["editable"],
    "onclick" : copyToClipboard
  });        

function copyToClipboard()
{ 
    var tempNode = document.getElementById("temp");
    tempNode.value = "some text";
    tempNode.select();
    var status = document.execCommand('copy',false,null);

    if(status) alert('successful');

    else alert('unsuccessful');
}    

私のmanifest.jsonは次のとおりです。

{
    "manifest_version": 2,

    "name": "Freedom",
    "description": "Provides users useful and fun context menu options that they can access from anywhere.",
    "version": "1.0",

    "permissions": [
        "contextMenus",
        "clipboardWrite"
        ],  

    "background": {
        "page": "background.html"
    }   

}    

chrome.contextMenus.create() 関数を間違って宣言しているようです。createPropertiesドキュメントを読んだことがありますが、オブジェクトを適切に作成していないとしか思えません。

私はこれらのソースを模倣しようとしています:

Chrome拡張機能のコンテキストメニュー項目でコンテンツスクリプトメソッドを呼び出すことは可能ですか?

http://paul.kinlan.me/chrome-extension-adding-context-menus/

その他の関連する質問は次のとおりです。

Chrome 拡張機能でクリップボードにコピー

Google Chrome 拡張機能からテキストをクリップボードにコピーするには?

4

1 に答える 1

3

ドキュメントの「createProperties」は、メソッドに渡される辞書ですchrome.contextMenus.create(つまり、「タイトル」、「コンテキスト」などを含むもの)。

onclickイベントの説明にchrome.contextMenus.createは、関数が 2 つのパラメーターを受け取ることが記載されています。最初のパラメーター ("info") は、選択したテキストに関する情報を含む辞書です。2 番目のパラメーター (「タブ」) には、タブに関する情報が含まれています (ただし、この場合は必要ありません)。
「info」ディクショナリには、コンテキスト メニュー項目がクリックされたときに選択されたテキストを保持するプロパティ「selectionText」があります。これは、次のようにコードで使用できます。

function copyToClipboard(info) {
    var tempNode = document.getElementById("temp");
    tempNode.value = info.selectionText; // <-- Selected text
    tempNode.select();
    document.execCommand('copy', false, null);
}

それはあなたの差し迫った質問を解決するでしょう。それに加えて、バックグラウンド ページイベント ページ
に 変換することで拡張機能を改善できます。バックグラウンド ページに対するイベント ページの主な利点は、バックグラウンドでアイドル状態になっている間、拡張機能が不必要にメモリを使用しないことです。

// background.js

// Register context menu
chrome.runtime.onInstalled.addListener(function() {
    chrome.contextMenus.create({
        "id": "some id",  // Required for event pages
        "title": "Copy selected text to clipboard",
        "contexts": ["editable"],
        // "onclick" : ...  // Removed in favor of chrome.contextMenus.onClicked
    });

});

// Register a contextmenu click handler.
chrome.contextMenus.onClicked.addListener(copyToClipboard);

これは最小限のmanifest.jsonです(イベントページ"persistent": falseを使用することを指定するキーに注意してください)

{
    "manifest_version": 2,

    "name": "Copy selected text to clipboard",
    "version": "1.0",

    "permissions": [
        "contextMenus",
        "clipboardWrite"
     ],

    "background": {
        "page": "background.html",
        "persistent": false
    }
}   
于 2015-01-11T22:53:49.357 に答える