剪贴板复制/粘贴内容脚本(Chrome扩展)
我正在使用内容脚本来操作DOM中的数据。 我一直在使用document.execCommand('copy');成功在一个弹出页面上。剪贴板复制/粘贴内容脚本(Chrome扩展)
我现在正在寻找一种方法使其在内容脚本上工作。 我检查了内容脚本here的限制,但我不明白剪贴板控件是否受限。 我也在这里检查了答案 - 在*,但似乎大多数是不确定的,有些来自几年前,所以可能会有变化。
即使它是有限的,是否有可能有某种解决方法?
谢谢!
我发布了我有的当前脚本。
的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);
}
内容脚本不能在目前使用剪贴板。将来,一旦解决了crbug.com/395376,那么问题中显示的代码将按预期工作。
直到这个bug是固定的,你必须将数据从那里发送到后台页面和复制文本:
// content script
chrome.runtime.sendMessage({
type: 'copy',
text: 'some text to copy'
});
脚本上background page或event 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();
}
});
非常感谢您的帮助。希望我明天在办公室得到这个东西。然后将评论。 – 2014-09-02 16:07:30
工作完美!你真是太棒了:) – 2014-09-03 05:29:23
这个错误是从9/2014开始的状态修复 – 2015-02-25 19:10:48
你能否证实脚本是注入的吗?你应该尝试传递'tab.id'而不是'null'。 – Xan 2014-09-02 11:34:42
什么是PoleIME?它是否包含在你的'page-editor.js'中,还是在页面自己的脚本中? – Xan 2014-09-02 11:37:22
是的,我确认脚本被注入并且DOM正在被成功处理。 PoleIME是一个填充数据的输入字段。它包含在脚本中。 textarea copyForm已成功添加到主体,并且已成功填充和选择。我在页面上看到结果,但复制功能不起作用。 整个脚本处于工作状态,没有进行优化,并且是6600行 - 这就是为什么我没有包含它。 – 2014-09-02 12:06:31