剪贴板复制/粘贴内容脚本(Chrome扩展程序)

时间:2014-09-02 11:30:16

标签: google-chrome-extension content-script

我正在使用内容脚本来操纵DOM中的数据。 我一直在弹出页面上成功使用 document.execCommand(' copy');

我现在正在寻找一种方法使其适用于内容脚本。 我已经检查了内容脚本here的限制,但是我不明白Clipboard控件是否受限制。 我也在这里检查了答案 - 在stackoverflow中,但似乎大多数都是不确定的,有些是几年前的,所以可能会有变化。

即使它有限,是否可以采取某种解决方法?

谢谢!

我发布了我当前的脚本。

的manifest.json

{
  "name": "Page action by URL",
  "version": "1.0",
  "description": "Прибавка за обработка на данните от НБДН.",
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "page_action" :
  {
    "default_icon" : "icon-19.png",
    "default_title" : "Приложение за НБД за PHP"
  },
  "permissions" : [
    "clipboardWrite",
    "clipboardRead",
    "declarativeContent",
    "activeTab",
    "tabs",
    "https://nbd.grao.government.bg/graoappshort/*"
  ],
  "icons" : {
    "48" : "icon-48.png",
    "128" : "icon-128.png"
  },
  "manifest_version": 2
}

background.js

chrome.runtime.onInstalled.addListener(function() {
  // Replace all rules ...
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    // With a new rule ...
    chrome.declarativeContent.onPageChanged.addRules([
      {
        conditions: [
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: { urlContains: 'nbd.grao.government.bg/graoappshort/' },
          })
        ],
        actions: [ new chrome.declarativeContent.ShowPageAction() ]
      }
    ]);
  });
});


chrome.pageAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(null, {file: 'page-editor.js'});
  chrome.tabs.insertCSS(null, {file: "style-inject.css"});
});

和page-editor.js中的函数

function(){
      var copyFrom = document.createElement("textarea");
      copyFrom.textContent = PoleIME.value;
      document.body.appendChild(copyFrom);
      copyFrom.focus();
      document.execCommand('SelectAll');
      document.execCommand('Copy');
      //document.body.removeChild(copyFrom);
      }

1 个答案:

答案 0 :(得分:23)

内容脚本此刻无法使用剪贴板。将来,crbug.com/395376解决之后,问题中显示的代码将按预期运行。

在修复错误之前,您必须将数据发送到后台页面并从那里复制文本:

// content script
chrome.runtime.sendMessage({
    type: 'copy',
    text: 'some text to copy'
});

background pageevent page上的脚本:

chrome.runtime.onMessage.addListener(function(message) {
    if (message && message.type == 'copy') {
        var input = document.createElement('textarea');
        document.body.appendChild(input);
        input.value = message.text;
        input.focus();
        input.select();
        document.execCommand('Copy');
        input.remove();
    }
});