8

我想通过 Chrome 扩展将一些文本变量写入剪贴板,当用户按下快捷键时会发生这种情况。除了写入剪贴板之外,我已经完成了所有部分。

我使用这些关键字搜索了整个 StackOverflow:“[google-chrome-extension] Clipboard”

所以我想说,我见过所有相关的:

  • 添加clipboardReadclipboardWrite许可(已完成)
  • 将文本添加到<textarea>, call document.execCommand('Copy');document.execCommand("Copy", false, null);

即使我在 StackOverflow 上尝试了我的扩展textarea,我也将我的文本插入到 StackOverflow 的 wmd-input 部分textarea,然后选择它,然后调用复制。没什么,没什么,没什么……

一切都试过了。请告知...我错过了什么?

4

4 回答 4

10

基于https://stackoverflow.com/a/12693636

function directCopy(str){
    //based on https://stackoverflow.com/a/12693636
        document.oncopy = function(event) {
    event.clipboardData.setData("Text", str);
    event.preventDefault();
        };
    document.execCommand("Copy");
        document.oncopy = undefined;
}
于 2013-08-15T17:27:28.070 回答
5

您可以尝试以下代码,它将文本写入剪贴板

作为一个例子,我写到Sample剪贴板

输出

在此处输入图像描述

清单.json

清单文件是所有 chrome 扩展的关键,确保它具有所有权限

 {
  "name": "Copy to ClipBoard Demo",
  "description" : "This is used for demonstrating Copy to Clip Board Functionality",
  "version": "1",
  "browser_action": {
    "default_popup": "popup.html"
  },
  "permissions":["clipboardWrite"],
    "manifest_version": 2
}

popup.html

一个简单的浏览器操作 HTML 文件,带有输入框和按钮

<html>

    <head>
        <script src="popup.js"></script>
    </head>

    <body>
        <input type="text" id="text" placeHolder="Enter Text To Copy"></input>
        <button id="copy">Copy</button>
    </body>

</html>

popup.js

它将内容复制<input>到剪贴板

function copy() {

    //Get Input Element
    var copyDiv = document.getElementById('text');

    //Give the text element focus
    copyDiv.focus();

    //Select all content
    document.execCommand('SelectAll');

    //Copy Content
    document.execCommand("Copy", false, null);
}

//Add Event Listeners to Button Click
document.addEventListener("DOMContentLoaded", function () {
    document.getElementById("copy").onclick = copy;
});

或者

function copy(){

    //Get Input Element
    document.getElementById("text").select();

    //Copy Content
    document.execCommand("Copy", false, null);
}

//Add Event Listeners to Button Click
document.addEventListener("DOMContentLoaded", function () {
    document.getElementById("copy").onclick = copy;
});
于 2012-12-16T07:15:07.457 回答
2

使用示例:

copyStringToClipboard("abc123");

    function copyStringToClipboard (str) {
      // Create new element
      var el = document.createElement('textarea');
      // Set value (string to be copied)
      el.value = str;
      // Set non-editable to avoid focus and move outside of view
      el.setAttribute('readonly', '');
      el.style = {position: 'absolute', left: '-9999px'};
      document.body.appendChild(el);
      // Select text inside element
      el.select();
      // Copy text to clipboard
      document.execCommand('copy');
      // Remove temporary element
      document.body.removeChild(el);
    }
于 2018-12-14T16:35:50.490 回答
1

Suonds 就像您试图从内容脚本中复制一样。从这个答案中建立joelptJeff Gran的答案,这里是如何从内容脚本中复制任何一段文本:

"permissions": [
    "clipboardWrite",...

在您的 main.js 或任何后台脚本中:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
  var copyFrom = document.createElement("textarea");
  copyFrom.textContent = request.text;
  var body = document.getElementsByTagName('body')[0];
  body.appendChild(copyFrom);
  copyFrom.select();
  document.execCommand('copy');
  body.removeChild(copyFrom);
})

从您的内容脚本:

chrome.runtime.sendMessage({text:textToCopy});
于 2015-12-04T21:16:00.293 回答