我有一个Firefox Web扩展,它应该生成将链接复制到剪贴板的按钮。在我的插件的内容脚本中,我有:
button.onclick = function() {
var link = window.location.href.replace(/#[0-9a-zA-Z_]+$/, '') + '#' + id;
var txtToCopy = document.createElement('input');
txtToCopy.value = link;
txtToCopy.select();
console.log(txtToCopy.value);
var res = document.execCommand('copy');
console.log(res);
}
正如您所看到的,我记录了我尝试复制的值以及execCommand
返回的结果。两者都是我所期待的。
"https://thing.example.com#12345"
true
但是,它似乎并未实际将文本复制到剪贴板。根据MDN的说法,我不需要任何额外的权限,因为它发生在一个事件中,来自execCommand
的响应使得我根据需要设置了所有内容。
我在Ubuntu 16.04,Firefox 51.0.1上运行,启用了e10s。也许e10s是我的问题,会给予更新。
答案 0 :(得分:3)
您必须将txtToCopy
附加到DOM才能从中进行复制,并且必须“可见”(或多或少)。
button.onclick = function() {
var link = window.location.href.replace(/#[0-9a-zA-Z_]+$/, '') + '#' + id;
var txtToCopy = document.createElement('input');
txtToCopy.style.left = '-300px';
txtToCopy.style.position = 'absolute';
txtToCopy.value = link;
document.body.appendChild(txtToCopy);
txtToCopy.select();
console.log(txtToCopy.value);
var res = document.execCommand('copy');
console.log(res);
txtToCopy.parentNode.removeChild(txtToCopy);
}