これが私のユースケースのスクリーンショットです:
ボタンは単なる<button>Copy To Clipboard</button>
要素です。
これを達成するための最良の方法は何ですか? 私はjQueryを使用しています。
私はそれが最新のブラウザで動作することだけに関心があります.IE8で動作する場合は追加のボーナスですが、100%必須ではありません.
これが私のユースケースのスクリーンショットです:
ボタンは単なる<button>Copy To Clipboard</button>
要素です。
これを達成するための最良の方法は何ですか? 私はjQueryを使用しています。
私はそれが最新のブラウザで動作することだけに関心があります.IE8で動作する場合は追加のボーナスですが、100%必須ではありません.
ほとんどのクロスブラウザー実装では、Flash を使用してセキュリティ制限を回避しています。私の知る限り、システムのペーストボードにアクセスするための W3C 標準はありません。
過去にClippyを使用しました。軽量で高速で、箱に書かれているとおりに機能します。
このページは、これを行うためのコードを提供しているようです:
function copyToClipboard(s)
{
if( window.clipboardData && clipboardData.setData )
{
clipboardData.setData("Text", s);
}
else
{
// You have to sign the code to enable this or allow the action in about:config by changing
user_pref("signed.applets.codebase_principal_support", true);
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
var clip Components.classes['@mozilla.org/widget/clipboard;[[[[1]]]]'].createInstance(Components.interfaces.nsIClipboard);
if (!clip) return;
// create a transferable
var trans = Components.classes['@mozilla.org/widget/transferable;[[[[1]]]]'].createInstance(Components.interfaces.nsITransferable);
if (!trans) return;
// specify the data we wish to handle. Plaintext in this case.
trans.addDataFlavor('text/unicode');
// To get the data from the transferable we need two new objects
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;[[[[1]]]]"].createInstance(Components.interfaces.nsISupportsString);
var copytext=meintext;
str.data=copytext;
trans.setTransferData("text/unicode",str,copytext.length*[[[[2]]]]);
var clipid=Components.interfaces.nsIClipboard;
if (!clip) return false;
clip.setData(trans,null,clipid.kGlobalClipboard);
}
}
<textarea id='testText'>#COPYTOCLIPBOARD CODE#</textarea><br>
<button onclick='copyToClipboard(document.getElementById('testText').value);'>
どうやら Mozilla ベースのブラウザはこれを行う許可を求めますが、それは避けられないと思います。