document.execCommand('copy') v Promise (Callbacku) rubrika: Programování: JavaScript

5 anti.cz
položil/-a 12.9.2016
 
upravil/-a 12.9.2016

Ahoj,

mam mensi problem s document.execCommand('copy') v Promise.

Jde o to, ze potrebuji data, ktere mi vrati API kopirovat do schranky.

Pouzivam klaciske

function copyToClipboard(textToClipboard)
{
  var textarea = document.createElement("TEXTAREA");
  textarea.value= textToClipboard;
  document.body.appendChild(textarea);
  textarea.select();
 
  try
  {
    var successful = document.execCommand('copy');
    document.body.removeChild(textarea);
    return successful
  }
  catch(err)
  {
    document.body.removeChild(textarea);
    return false
  }
}

Normalne to funguje, ale pokud to pozivam v Promise nebo v callbaku tak mi to nejde.

axios.get('apiUrl')
  .then(function (response){
    const result = copyToClipboard(
      JSON.parse(response.request.responseText).textToClipboard;
    );
    console.log(result); //false
  });

Obdobne mi to nejde ani s jQuery. Skonci to na tom, ze return successful vrati false. Nekaje napady cim to muze byt? Kdyz dam pryc document.body.removeChild(textarea), tak textarea je vytvorena a selectnuta. Kdyz dam document.execCommand('copy'); do konzole v browseru, tak to funguje...

Pouzito v Reactu bez server side.

odkaz
7 ondrej.zara
odpověděl/-a 13.9.2016

Je to skutečně tím, že některé činnosti lze vykonat výhradně jen v reakci na uživatelskou interakci. Typicky se toto řeší tím, že si data nachystám s předstihem, tedy třeba už při kliknutí/mousedown na prvek, ve kterém následně akci "copy" očekávám.

Více info viz poznámka pod čarou [1] na MDN k execCommand.

Komentáře

  • anti.cz : To je prave to, ze to dopredu prichystat nejde. Ale asi bude button "vygenerovat blabla" a "kopirovat blabla" 13.9.2016

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.