2017-02-07 83 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