Javascript 为什么document.execCommand(';粘贴';)在我的扩展中不起作用
我正在创建一个可以读取剪贴板内容的Google chrome扩展。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
但我无法获得这方面的文档。我想获得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不是一个函数