从网页Chrome扩展程序复制数据

时间:2016-02-06 00:19:13

标签: javascript google-chrome google-chrome-extension selection

我试图从网页上复制一些数据而我正在使用

chrome.tabs.executeScript(tab.id, {code: 'var dataToSend;dataToSend= window.getSelection().toString(); ' +'chrome.runtime.sendMessage({ text: dataToSend });'});

在大多数情况下工作正常,但如果有框架或花哨网站或从谷歌环聊(gmail内部)尝试复制,它将不会复制所选内容,我也尝试使用document.getSelection,但没有运气。任何人都知道我们可以从网页上复制数据吗?我的完整代码就是这个

function genericOnClick(info, tab) 
{
  chrome.tabs.executeScript(tab.id, {
      code: 'var dataToSend;dataToSend=\"\";dataToSend= window.getSelection().toString(); ' +
          'chrome.runtime.sendMessage({ text: dataToSend });'
  });
  chrome.runtime.onMessage.addListener(function (msg) {
    if (msg.text !== undefined) {
      alert(msg.text);
      }
  });
}

var title = "My Menu";
chrome.contextMenus.create({"title": title, "contexts":["selection"],"onclick": genericOnClick});

任何帮助都非常感激。

更新 添加了一些最小的代码来重新创建问题     background.js

{
  "name"                   : "Test Copy",
  "version"                : "0.1",
  "manifest_version" : 2,
  "permissions"            : [
    "contextMenus",
    "tabs",
    "activeTab"
  ],
  "background"             : {
    "scripts"    : ["background.js"]
  },
  "content_scripts"        : [{
    "matches"    : ["http://*/*", "https://*/*"],
    "js"         : ["background.js"],
    "run_at"     : "document_end",
    "all_frames" : true
  }]
}

的manifest.json

if (maintainerIds != null && maintainerIds.Count > 0)
{
    foreach (string maintainerId in maintainerIds)
    {
        var maintainer = new User() { Id = maintainerId };
        users.Attach(maintainer);
        newPackage.Maintainers.Add(maintainer);
    }
}

它适用于大多数网站,不适用于http://help.autodesk.com/cloudhelp/2015/ENU/Maya-Tech-Docs/CommandsPython/

等框架的网站

2 个答案:

答案 0 :(得分:0)

chrome.tabs.query({
      "active": true,
      "currentWindow": true    
      }, function (tabs) {
        chrome.tabs.sendMessage(tabs[0].id, {
          "functiontoInvoke": "getSelectedDataFromPage"
        });
      });
  chrome.runtime.onMessage.addListener(function (msg) {
    if (msg.selText !== undefined && msg.selText != "") {
      copyToNext(msg.selText);
      }
  });

从我的后台脚本到我发送我的content_script并在我的内容脚本window.getSelection中工作,因为我们可以添加all_frame,这将适用于每个地方。

答案 1 :(得分:-1)

基于document,从Chrome 43开始,开发人员现在可以使用'document.execCommand('copy')''以编程方式触发复制和剪切操作document.execComand('cut')'随时。

您的app / extension必须声明clipboardWrite:https://developer.chrome.com/extensions/permissions

操作' window.selection'指向要复制的数据后,可以调用'document.execCommand('copy')'

以下是有关如何操作的完整指南的链接:https://developers.google.com/web/updates/2015/04/cut-and-copy-commands

注意:复制是每个浏览器的安全限制。如果允许任何网站获取数据,这是一个安全漏洞。