2011-08-06 25 views
7

私の拡張機能で問題が発生しました。私は周りを見回して、私がしなければならないことを見つけました、私はちょうどそれを働かせることができません。ChromeでexecCommand( 'paste')を使用できない

これまでのところ、私が持っている:

function pasteAndGo() 
{ 
    document.execCommand('paste') 
    alert("Pasted") 
} 

アラートがアップしますが、何も貼り付けられていません。

変更が必要な部分はdocumentですが、何が見つかりませんか?あなたがコンテンツを受信することが可能であるfocuesにおける制御に必要

+0

あなたはこのコードをどこで実行していますか? – serg

+5

これを見てください:http://farter.users.sourceforge.net/blog/2010/11/20/accessing-operating-system-clipboard-in-chromium-chrome-extensions/ –

+0

このコードは実行中ですbackground.htmlではなく、通常のWebページです。ただし、これは実験的なAPIではなく、バージョン13(http://code.google.com/chrome/extensions/whats_new.html#13)のChromeの一部に組み込まれています。これは今すぐ動作するはずです。また、私はそれのためのアクセス許可を追加しました:) –

答えて

2

通常ページでは実行できません。バックグラウンドページでのみ実行できます。

+1

あなたは完全な目に見えないテキストエリアのことをしますか?誰でもコードサンプルを持っていますか? –

+1

はもうtrueではありません。下記の回答を参照してください( 'クロム39以降、コンテンツスクリプトはマニフェストファイルのクリップボードのパーミッションを宣言した後にこれらのクリップボードAPIを使用することもできます) – schellmax

+2

バックグラウンドページの例ですか? –

0

...

JSでクリップボードに関するいくつかの例についてはhttp://www.geekpedia.com/tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html
http://help.dottoro.com/ljcvtcaw.php

についてはChromeの拡張機能がCopy/Paste Not Working in Chrome Extension

を見ます
+0

それは私の情報フォーム(他のスタックオーバーフローの質問へのリンク)を見つけた正確なページです。私はそれを正しい領域に貼り付けるように努力しますか? :S –

+0

あなたは、クリップボードにあるものを受け入れることができるものに焦点を当てる必要があります - クリップボードにテキストが含まれているときにテキストエリアのように... – Yahia

9

はChromeで実験的なクリップボードのAPIがありましたが、これはChromeで削除された13

Chromeはより標準的な document.execCommand('paste')document.execCommand('copy')document.execCommand('cut')コマンドに向けて移動した

:Chromeの場合https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Executing%5FCommands

ます」マニフェストに権限を追加する必要があります: "clipboardRead"と "clipboardWrite"。 http://developer.chrome.com/extensions/declare_permissions.html

Chrome 38まで、これらのクリップボードの権限はバックグラウンドスクリプトなどの拡張ページでのみ利用できました。 Chrome 39以降、コンテンツスクリプトでは、マニフェストファイル(crbug.com/395376)のクリップボード権限を宣言した後で、これらのクリップボードAPIを使用することもできます。

+0

このドキュメントでは、クリップボードについて何も言及していないようです。 –

+0

アップデート - リンク先:http://developer.chrome.com/extensions/declare_permissions.html –

1

あなたはexecCommand('copy')execCommand('cut')を使用するdocument.execCommand('paste')clipboardWrite許可を使用するclipboardRead許可を設定する必要があります。
それ以外の場合、アクセス権は拒否され、何も起こりません。

詳細については、thisのリンクを確認してください。

5

これはバックグラウンドページでうまく動作します。もちろん

function getClipboard() { 
    var pasteTarget = document.createElement("div"); 
    pasteTarget.contentEditable = true; 
    var actElem = document.activeElement.appendChild(pasteTarget).parentNode; 
    pasteTarget.focus(); 
    document.execCommand("Paste", null, null); 
    var paste = pasteTarget.innerText; 
    actElem.removeChild(pasteTarget); 
    return paste; 
}; 

はあなたの拡張はまだ「clipboardRead」の許可を必要とし、あなたが戻ってあなたのコンテンツのスクリプトにこの情報を取得するために、メッセージパッシングを使用する必要があります。

content.js:

chrome.extension.sendMessage({ 
    cmd: "clipboard", //$NON-NLS-0$ 
    action: "paste" //$NON-NLS-0$ 
}, function(response) { 
    if (response.paste) { 
     var range = document.getSelection().getRangeAt(0); 
     range.deleteContents(); 
     range.insertNode(document.createTextNode(response.paste)); 
    } 
}); 

背景.js:

function getClipboard() { 
    var pasteTarget = document.createElement("div"); 
    pasteTarget.contentEditable = true; 
    var actElem = document.activeElement.appendChild(pasteTarget).parentNode; 
    pasteTarget.focus(); 
    document.execCommand("Paste", null, null); 
    var paste = pasteTarget.innerText; 
    actElem.removeChild(pasteTarget); 
    return paste; 
}; 

function onClipboardMessage(request, sender, sendResponse) { 
    if (request.action === "paste") { //$NON-NLS-0$ 
     sendResponse({ 
      paste: getClipboard() 
     }); 
    } 
} 

chrome.extension.onMessage.addListener(onClipboardMessage); 
+0

@peter -ehrlichこんにちはピーター、この例についてはどうですか?あなたが求めていたものですか? – stackunderflow

+0

こんにちは@ジョセフフィフィーあなたはこれを働かせましたか?あなたは助けになりましたか? – stackunderflow

関連する問題