我正在尝试使用带有chome扩展名的execcommand("paste")
将剪贴板数据粘贴到textarea中,但我似乎无法让它工作。
权限已设置。
我试图在textarea上设置focus()
,但document.execCommand("paste")
什么都不做,我没有错误。
从后台页面调用execcommand("paste")
也不会做任何事情。
<form>
<textarea id="ta"></textarea>
</form>
<script type="text/javascript">
document.findElemetById("ta").focus();
document.execCommand("paste");
</script>
答案 0 :(得分:39)
剪贴板功能是my extension的关键部分,所以我看到了所有正常的问题。在我的背景页面上,我公开了copy
和paste
函数,页面本身包含<textarea id="sandbox"></textarea>
;
function copy(str) {
var sandbox = $('#sandbox').val(str).select();
document.execCommand('copy');
sandbox.val('');
}
function paste() {
var result = '',
sandbox = $('#sandbox').val('').select();
if (document.execCommand('paste')) {
result = sandbox.val();
}
sandbox.val('');
return result;
}
我使用jQuery来简化,但你明白了。现在,只要我想使用剪贴板功能,我只需调用相关功能即可。我的扩展程序中的其他网页可以通过chrome.extension.getBackgroundPage()访问此API,但如果您的背景页是chrome.runtime.getBackgroundPage(callback),也可以使用event page。
我不确定这是不是最佳做法,或者这个功能是否存在,但这对我来说非常有用并且非常干净。
答案 1 :(得分:18)
这对于Alasdair的出色回应的评论太长了,所以我正在创造另一个答案。 Alasdair的答案非常好,对我来说很有用,但作为Chrome扩展程序的新手,它仍然需要一段时间才能让它运行起来。对于处于类似职位的人来说,这是他答案的扩展。
如果您已请求相应的权限,则背景/事件页面可以与系统剪贴板进行交互。它们无法与用户加载的页面的DOM进行交互。内容脚本无法与系统剪贴板交互,但它们可以与用户已加载的页面的DOM进行交互。请查看explanation of the extension architecture,了解所有这些内容。
这实际上意味着您需要在事件/背景页面中从系统剪贴板执行复制/粘贴操作,这正是Alasdair上面概述的内容。从用户正在查看的页面的DOM中粘贴或复制必须在您的内容脚本中进行。这两个脚本可以很容易地与message passing进行通信。
我有an extension,唯一的目的是粘贴,而这个架构主要来自这篇文章。如果您想在实践中看到上述技术,take a look at the code。特别是background.html,background.js和contentscript.js。
如果你真的很匆忙,here is a gist。
答案 2 :(得分:0)
function PasteString() {
var editor = document.getElementById("TemplateSubPage");
editor.focus();
// editor.select();
document.execCommand('Paste');
}
function CopyString() {
var input = document.getElementById("TemplateSubPage");
input.focus();
// input..select();
document.execCommand('Copy');
if (document.selection) {
document.selection.empty();
} else if (window.getSelection) {
window.getSelection().removeAllRanges();
}
}
希望这对你有用