Google Chrome だとBookmarklet(javascript)で直接コードからクリップボードにアクセスする事は基本的にできない。
そこで、ブックマークレットを押したときにクリップボードへコピーする方法として、
一旦、空のオブジェクトを仮置きして、選択状態にしてコピーしてしまえばよい。
只コピーするだけなら、上記の内容で問題ない。
しかし、今回求めているのは 短縮URLサービスの処理結果、
つまりは外部サービスへPOSTした結果を受け取ったのちに、クリップボードへコピーする方法だ。
先述の方法では、POSTコールバック内に
ret = document.execCommand('copy');
を書いたとしても、実行結果は必ずfalseとなる。
これは、Chromeがクリップぼおーどへのコピーをユーザーアクションがトリガーの場合にしか認めていないからだ。
よって、方法としてはPOSTした処理結果の応答が返ってくるのを待って、同期的に処理を行うしかない。
結果からいうと、 XMLHttpRequestをsendした後、Timeoutを待てばよい。
以下に、コードを公開しているので参照されたし。
GitHub - Ohurochan/ClipboardCopyBookmarklet: Javascript Bookmarklet : copy the short url to clipboard
Javascript Bookmarklet : copy the short url to clipboard - Ohurochan/ClipboardCopyBookmarklet
Timeoutは安易的かもしれないが、利用シーンを考えると十分である。
利用にあたっては自己責任である事に注意。