Firefox webextension没有复制到剪贴板

时间:2017-02-07 17:18:26

标签: javascript firefox clipboard firefox-webextensions

我有一个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是我的问题,会给予更新。

1 个答案:

答案 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);

}