Redmineのタイトルをコピーする

Redmineのチケットタイトルをコピーしたい場合BookmarkletでJavaScriptを実行することで実現できる。

Safariでクリップボードにコピーする

SafariではJavaScriptでクリップボードにテキストをコピーしようとすると一度textareaに貼り付けてからコピーコマンドを実行する必要がある。

textareaのテキストをコピーするため、リンク付きのテキストでコピーできず、プレーンテキストになる。

javascript:
(function () {
    var body = document.getElementsByTagName("body")[0];
    var [, title=document.title] = document.title.match(/(.*#\d :.*) - .*? - Redmine for .*/) || [];
    var textarea = document.createElement("textarea");
    textarea.textContent = title;
    body.appendChild(textarea);
    textarea.contentEditable = true;
    textarea.readOnly = false;
    textarea.setSelectionRange(0, 999999);
    document.execCommand("copy");
    body.removeChild(textarea);
})();

Chromeなどほかのブラウザでコピーする

(function () {
  function listener(e) {
    var [, title=document.title, text=""] = document.title.match(/.*(#\d+)(:.*) - .*? - Redmine for .*/) || [];
    e.clipboardData.setData("text/html", "<a href='" + document.URL + "'>" + title + "</a>" + text);
    e.clipboardData.setData("text/plain", title + text);
    e.preventDefault();
  }
  document.addEventListener("copy", listener);
  document.execCommand("copy");
  document.removeEventListener("copy", listener);
})();