2017-02-07 25 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 делает мне все, что нужно для настройки.

Я работаю на Ubuntu 16.04, Firefox 51.0.1, с включенными e10s. Может быть, 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