在chrome扩展中正确使用execcommand("paste")

mon*_*int 20 javascript google-chrome-extension

我正在尝试使用execcommand("paste")chome扩展将剪贴板数据粘贴到textarea中,但我似乎无法让它工作.权限已设置.我试图设置focus()textarea,但document.execCommand("paste")什么也没做,我没有错误.execcommand("paste")从后台页面调用也没有任何作用.

<form>
     <textarea id="ta"></textarea>    
</form>
<script type="text/javascript">
    document.findElemetById("ta").focus();
    document.execCommand("paste");
</script>
Run Code Online (Sandbox Code Playgroud)

Ala*_*air 42

剪贴板功能是我扩展的关键部分,所以我已经看到了所有正常的问题.在我的背景页面上,我公开了一个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;
}
Run Code Online (Sandbox Code Playgroud)

我使用jQuery是为了简单,但你明白了.现在,只要我想使用剪贴板功能,我只需调用相关功能即可.我的扩展程序中的其他页面可以通过chrome.extension.getBackgroundPage()访问此API,但如果您的背景页面是事件页面,也可以使用chrome.runtime.getBackgroundPage(回调).

我不确定这是不是最好的做法,或者这个功能是否存在这个功能但是这对我来说非常有用并且非常干净.

  • 确保您还设置了权限。“权限”:[“ clipboardWrite”] (3认同)
  • 您好,今天2015年7月21日,document.execCommand('copy')在没有扩展名的情况下工作正常,但是document.execCommand('paste')不起作用.我还需要扩展吗? (2认同)
  • 有人可以展示一个没有 jQuery 的例子吗?也许链接到github要点?那会有所帮助 (2认同)

use*_*019 18

这对于阿拉斯戴尔的出色反应评论太长了,所以我正在创造另一个答案.Alasdair的答案非常好,对我来说很有用,但作为Chrome扩展程序的新手,它仍然需要一段时间才能让它运行起来.对于处于类似位置的任何人来说,这是他答案的扩展.

如果您已请求相应的权限,则后台/事件页面可以与系统剪贴板进行交互.它们无法与用户加载的页面的DOM进行交互.内容脚本无法与系统剪贴板交互,但它们可以与用户已加载的页面的DOM进行交互.请查看扩展体系结构说明,以便对所有这些进行全面概述.

这实际上意味着您需要在事件/背景页面中从系统剪贴板执行复制/粘贴操作,这正是Alasdair上面概述的内容.从用户正在查看的页面的DOM中粘贴或复制必须在您的内容脚本中进行.这两个脚本可以很容易地与消息传递进行通信.

我有一个扩展,其唯一目的是粘贴,而这个架构主要来自这篇文章.如果您想在实践中看到上述技术,请查看代码.特别是background.html,background.jscontentscript.js.

如果你真的很匆忙,这里有一个要点.