Google chrome extension 剪贴板复制/粘贴内容脚本(Chrome扩展)

Google chrome extension 剪贴板复制/粘贴内容脚本(Chrome扩展),google-chrome-extension,content-script,Google Chrome Extension,Content Script,我正在使用一个内容脚本来操作DOM中的数据。 我一直在使用document.execCommand('copy');在弹出页面上成功 我现在正在寻找一种方法,使其在内容脚本上工作。 我已经检查了内容脚本的限制,但我不知道剪贴板控制是否受到限制。 我也检查了这里的答案——在stackoverflow中,但似乎大多数答案都是不确定的,有些是几年前的答案,所以可能会有变化 即使它是有限的,是否有可能有某种解决办法 谢谢大家! 我正在发布我拥有的当前脚本 manifest.json { "name"

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

我现在正在寻找一种方法,使其在内容脚本上工作。 我已经检查了内容脚本的限制,但我不知道剪贴板控制是否受到限制。 我也检查了这里的答案——在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);
      }
内容脚本目前无法使用剪贴板。将来,一旦问题解决,问题中显示的代码将按预期工作

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

//内容脚本
chrome.runtime.sendMessage({
键入:“复制”,
文本:“要复制的某些文本”
});
在或上编写脚本:

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

您能确认脚本是否已被注入吗?您应该尝试传递
tab.id
而不是
null
。什么是
PoleIME
?它是包含在您的
页面编辑器.js中还是包含在页面自己的脚本中?是的,我确认脚本已被注入,并且DOM已成功操作。PoleIME是一个充满数据的输入字段。它包含在脚本中。textarea copyForm已成功附加到正文,并已成功填充和选择。我在页面上看到结果,但复制功能不起作用。整个脚本处于工作状态,没有经过优化,有6600行,这就是为什么我没有包括它;PoleIME.type=“text”;PoleIME.name=“IME”;PoleIME.id=“IME”;PoleIME.尺寸=60;PoleIME.value=“无论我在里面放了什么文本”非常感谢您的帮助。希望我明天在办公室把这件事做好。到时候我会评论的。效果很好!你真是太神奇了:)这个bug从2014年9月起就被修复了。我在我的mac上无法得到这个工作[chrome版本49.0.2623.87(64位)]@Brook它在这里工作(Linux),所以它可能是mac特有的bug。跟踪的问题上存在相当多的bug,例如。您的bug听起来像“应用程序:从后台页面写入剪贴板不起作用,但从应用程序窗口页面起作用”。有人建议对
元素使用非零宽度。试试看!