Javascript 为什么document.execCommand(';粘贴';)在我的扩展中不起作用

Javascript 为什么document.execCommand(';粘贴';)在我的扩展中不起作用,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我正在创建一个可以读取剪贴板内容的Google chrome扩展。 但我无法获得这方面的文档。我想获得IE剪贴板API中的剪贴板内容。 在清单文件中,我授予了 clipboardRead and clipboardWrite. 我在后台页面创建了一个函数,如下所示 chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { if (request.method == "getClipD

我正在创建一个可以读取剪贴板内容的Google chrome扩展。
但我无法获得这方面的文档。我想获得IE剪贴板API中的剪贴板内容。
在清单文件中,我授予了

clipboardRead and clipboardWrite.  
我在后台页面创建了一个函数,如下所示

 chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
 if (request.method == "getClipData")
   sendResponse({data: document.execCommand('paste')});
 else
   sendResponse({}); // snub them.
 });
在内容脚本中,我像这样调用函数

 chrome.extension.sendRequest({method: "getClipData"}, function(response) {
    alert(response.data);
 });
但这返回了我未定义的

var str = document.execCommand('paste');
您还需要添加剪贴板读取。

文档。execCommand(“粘贴”)返回成功或失败,而不是剪贴板的内容

该命令触发粘贴操作,粘贴到背景页面中的焦点元素中。您必须在背景页面中创建一个TEXTAREA或DIV contentEditable=true,并将其聚焦以接收粘贴内容

您可以在my BBCodePaste扩展中看到一个如何实现此功能的示例:

以下是如何在背景页中读取剪贴板文本的一个示例:

bg = chrome.extension.getBackgroundPage();        // get the background page
bg.document.body.innerHTML= "";                   // clear the background page

// add a DIV, contentEditable=true, to accept the paste action
var helperdiv = bg.document.createElement("div");
document.body.appendChild(helperdiv);
helperdiv.contentEditable = true;

// focus the helper div's content
var range = document.createRange();
range.selectNode(helperdiv);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
helperdiv.focus();    

// trigger the paste action
bg.document.execCommand("Paste");

// read the clipboard contents from the helperdiv
var clipboardContents = helperdiv.innerHTML;

如果想要纯文本而不是HTML,可以使用helperdiv.innerText,也可以切换到使用textarea。如果您想以某种方式解析HTML,您可以在DIV中遍历HTML dom(同样,请参阅我的bbcodeplaste扩展)

我们不能从javascript访问剪贴板,而不是IE浏览器和其他浏览器

解决这个问题的方法很简单:创建自己的自定义剪贴板,将文本存储在剪切的地方,然后直接粘贴到剪切的地方

函数复制(){
如果(!window.x){
x={};
}
x、 选择器={};
x、 Selector.getSelected=函数(){
var t='';
if(window.getSelection){
t=window.getSelection();
}else if(document.getSelection){
t=document.getSelection();
}else if(文档选择){
t=document.selection.createRange().text;
}
返回t;
}
var mytext=x.Selector.getSelected();
document.getElementById(“book”).innerHTML=mytext;
}
函数割(){
如果(!window.x){
x={};
}
x、 选择器={};
x、 Selector.getSelected=函数(){
var t='';
if(window.getSelection){
t=window.getSelection();
}else if(document.getSelection){
t=document.getSelection();
}else if(文档选择){
t=document.selection.createRange().text;
}
返回t;
}
var mytext=x.Selector.getSelected();
document.getElementById(“book”).innerHTML=mytext;
x、 Selector.setSelected()=“”;
}
函数粘贴()
{
var firstDivContent=document.getElementById('book');
var secondDivContent=document.getElementById('rte');
secondDivContent.innerHTML+=firstDivContent.innerHTML;
rte.focus();
}
函数clear()
{
document.getElementById('rte').innerHTML=“”;
rte.focus();
}
Cut
复制
粘贴
工作组
自己的剪贴板(黑客)

嘿,它返回True而不是剪贴板!代码与上面的代码相同,我授予了权限,我做错了什么?我的代码也返回true。。。似乎execCommand()根本不返回字符串:它实际上调用了粘贴命令。这看起来像是一个解决方法:可能重复未捕获的TypeError:chrome.extension.getBackgroundPage不是一个函数