我正在使用内容脚本来操纵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);
}
答案 0 :(得分:23)
内容脚本此刻无法使用剪贴板。将来,crbug.com/395376解决之后,问题中显示的代码将按预期运行。
在修复错误之前,您必须将数据发送到后台页面并从那里复制文本:
// 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();
}
});