素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

クリップボードにコピー

Chromeのcopyは, たしか, 隠しinput[type=text]作ってcopyさせたいものをvalueにいれて, selectionStart/Endをいじって, focusあてて, document.execCommand('copy')すればJSだけでできる.

http://twitter.com/Constellation/status/7188365498

これを参考にcopy関数を作ってみた。Internet ExplorerSafariGoogle Chromeで動く。FirefoxOperaで上手くいく方法は発見できず。
おまけでFirebugの入ってるFirefoxでも動くようにしてみた。

function copy(text) {
  var input, success;
  if ("console" in window && "notifyFirebug" in console) {
    console.notifyFirebug([text], "copy", "firebugExecuteCommand");
    success = true;
  } else {
    input = document.createElement("input");
    input.style.position = "absolute";
    input.style.top = "-100px";
    input.value = text;
    input.hidden = true;
    document.body.appendChild(input);
    input.select();
    try {
      success = document.execCommand("copy", false, null);
    } catch (ex) {
      success = false;
    } finally {
      document.body.removeChild(input);
    }
  }
  if (!success) {
    prompt("Press Ctrl+V", text);
  }
}

// copy("hello!");