2017-02-07 55 views
1

我有一个Firefox网络扩展,它应该生成将链接复制到剪贴板的按钮。在该插件我的内容脚本,我有:Firefox webextension不复制到剪贴板

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的响应使我可以根据需要设置一切。

我在启用了e10s的Ubuntu 16.04,Firefox 51.0.1上运行。也许e10s是我的问题,会给更新。

回答

2

您必须将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); 

} 
+1

就是这样(差不多)!一个小小的变化,显然,select()必须在追加到文档后发生。谢谢 – Nick