2017-11-02 15 views
0

現在、JavaScriptのコードでハードコードされた関数を使って、定義済みのリンクと組み合わされたタグのカスタムアドレスをコピーしています。私が作ったのは、入力タイプのテキスト要素を作成し、その値をコピーしたいものに設定することですが、何が起こるかは、私がしたいやり方ではうまくいかないことが判明しました。 Ctrl + Vを押すと、デバイスのクリップボードにある最新の値に2番目の値が貼り付けられました。 隠し入力タグで動作するようにexecCommand( "Copy")を作成するにはどうすればよいですか?隠し入力タグでexecCommand( "Copy")を動作させる

function shareFile() { 
     var hiddenItem = document.createElement("input"); 
     hiddenItem.type = "text"; 
     hiddenItem.setAttribute("style","display: none"); 
     hiddenItem.value = <?php echo (isset($_SERVER['HTTPS'])?"\"https://":"\"http://").$_SERVER['SERVER_NAME']."/filesystem/openfile.php?dir=\" + " ?> encodeURI(this.parentNode.parentNode.parentNode.getAttribute("r-directory")); 
     hiddenItem.select(); 
     console.log(hiddenItem.value); 
     document.execCommand("Copy"); 
     // location.href = "resources.php?smsg=The file's link has been successfully copied to your clipboard." <?php if (!empty($_GET['dir'])) echo " + \"&dir=".$_GET['dir']."\""?>; 
     return false; 

    } 

P.S.(関数は、imgタグのonclick属性に呼び出されます)可能な限り多くのjQueryはできません!ありがとうございました。

+0

あなたができない、から 'execCommand'コピーコンテンツは、コピー時に表示され_必ず_要素。ただし、コピーする直前にタイプや可視性を一時的に変更することはできます。すべてのスクリプトが実行される前にページがレンダリングされないため、この一時的な可視性の変更は表示されません。 – Teemu

+0

setAttributeスタイルのdisplay noneを削除し、this.appendChildを追加しましたが、まだ動作しませんでした。文字列をコピーするための回避策はありますか?私は、たとえそれが隠されていても、入力値をコンソールログに送ることができます。 –

+0

[意図したとおりに動作するようです](https://jsfiddle.net/bftfba6t/)..?ページがクライアントにロードされる前に、PHPコードが1回だけ実行されることに注意してください。 – Teemu

答えて

0

execCommandは、文書要素のいずれかの部分に追加された要素に作用します。

コードはdocument.querySelector("body").appendChild(hiddenItem);

を欠き、コマンドを実行した後に非表示にすることができる - >hiddenItem.setAttribute("style","display: none");

+0

申し訳ありません。それに応じてそれを編集します。 –

関連する問題