刚开始测试chrome扩展,基本上我想更改右键单击的链接并发送到剪贴板,请参阅:
background.js
var convert_buylink = function(event){
var parser = document.createElement('a');
parser.href = event.linkUrl;
parser.hostname = 'cart.local.co.nz';
parser.protocol = 'http';
var link = document.createElement('input');
//link.value = parse.href;
link.value = 'abc';
link.focus();
link.select();
document.execCommand('SelectAll');
document.execCommand("Copy")
}
chrome.contextMenus.create({title: "Copy Local BuyLink", contexts:["link"], onclick: convert_buylink});
的manifest.json
{
"manifest_version": 2,
"name": "Local Buylink",
"description": "Changes buylink to local cart",
"version": "1.0",
"background": {
"scripts": ["background.js"]
},
"permissions": [
"contextMenus",
"tabs",
"clipboardWrite"
]
}
我已经阅读了谷歌关于副本无法正常工作的一些结果,所有人都说它不能在内容页面上工作,但根据documentation:
扩展系统将生成一个后台页面,其中包含scripts属性中列出的每个文件。
答案 0 :(得分:0)
您在后台页面的文档对象中创建input
,但由于copy
命令工作所需的用户手势(上下文菜单点击)在另一个中执行,因此失败文档对象:网页。您创建的元素也不属于document
,它是一个分离的节点。
解决方案:在网页内创建一个隐藏的input
。
background.js:
function convert_buylink(info, tab) {
var parser = new URL(info.linkUrl);
parser.hostname = 'cart.local.co.nz';
parser.protocol = 'http';
clipboardCopy(parser.href);
}
function clipboardCopy(text) {
chrome.tabs.executeScript({code: "\
var input = document.createElement('input');\
input.value = '" + text.replace(/'/g, "\\'") + "';\
input.style.cssText = 'opacity:0; position:fixed';\
document.body.appendChild(input);\
input.focus();\
input.select();\
document.execCommand('Copy');\
input.remove();\
"});
}
的manifest.json:
"permissions": [
..............
"activeTab"
],