2014-09-02 156 views
9

我正在使用内容脚本来操作DOM中的数据。 我一直在使用document.execCommand('copy');成功在一个弹出页面上。剪贴板复制/粘贴内容脚本(Chrome扩展)

我现在正在寻找一种方法使其在内容脚本上工作。 我检查了内容脚本here的限制,但我不明白剪贴板控件是否受限。 我也在这里检查了答案 - 在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"}); 
}); 

和页面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); 
     } 
+0

你能否证实脚本是注入的吗?你应该尝试传递'tab.id'而不是'null'。 – Xan 2014-09-02 11:34:42

+0

什么是PoleIME?它是否包含在你的'page-editor.js'中,还是在页面自己的脚本中? – Xan 2014-09-02 11:37:22

+0

是的,我确认脚本被注入并且DOM正在被成功处理。 PoleIME是一个填充数据的输入字段。它包含在脚本中。 textarea copyForm已成功添加到主体,并且已成功填充和选择。我在页面上看到结果,但复制功能不起作用。 整个脚本处于工作状态,没有进行优化,并且是6600行 - 这就是为什么我没有包含它。 – 2014-09-02 12:06:31

回答

21

内容脚本不能在目前使用剪贴板。将来,一旦解决了crbug.com/395376,那么问题中显示的代码将按预期工作。

直到这个bug是固定的,你必须将数据从那里发送到后台页面和复制文本:

// 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(); 
    } 
}); 
+0

非常感谢您的帮助。希望我明天在办公室得到这个东西。然后将评论。 – 2014-09-02 16:07:30

+1

工作完美!你真是太棒了:) – 2014-09-03 05:29:23

+2

这个错误是从9/2014开始的状态修复 – 2015-02-25 19:10:48