Javascript 如何创建将选定文本复制到客户端剪贴板的HTML按钮?
下面是我的用例截图: 其中按钮只是一个Javascript 如何创建将选定文本复制到客户端剪贴板的HTML按钮?,javascript,html,copy,clipboard,Javascript,Html,Copy,Clipboard,下面是我的用例截图: 其中按钮只是一个复制到剪贴板的元素 实现这一目标的最佳方式是什么?我正在使用jQuery 我只关心它是否能在现代浏览器上运行,如果它能在IE8>上运行,这是一个额外的好处,但不是100%的要求。似乎提供了实现这一点的代码: function copyToClipboard(s) { if( window.clipboardData && clipboardData.setData ) { clipboardData.setD
复制到剪贴板的元素
实现这一目标的最佳方式是什么?我正在使用jQuery
我只关心它是否能在现代浏览器上运行,如果它能在IE8>上运行,这是一个额外的好处,但不是100%的要求。似乎提供了实现这一点的代码:
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);'>
功能复制到剪贴板
{
if(window.clipboardData&&clipboardData.setData)
{
设置数据(“文本”,s);
}
其他的
{
//您必须对代码进行签名才能启用此功能,或者通过更改
用户pref(“signed.applets.codebase\u principal\u support”,true);
netscape.security.privilegmanager.enablePrivilege('UniversalXPConnect');
var clip Components.classes['@mozilla.org/widget/clipboard;[[[1]]]]']]].createInstance(Components.interfaces.nsicpboard);
如果(!clip)返回;
//创建一个可转让的
var trans=Components.classes['@mozilla.org/widget/transferable;[[[1]]]]']].createInstance(Components.interfaces.nsitransable);
如果(!trans)返回;
//指定要处理的数据。在本例中为纯文本。
trans.addDataFlavor('text/unicode');
//我们需要两个新对象才能从数据库中获取数据
var str=新对象();
var len=新对象();
var str=Components.classes[“@mozilla.org/supports string;[[[1]]]]”].createInstance(Components.interfaces.nsistupsstring);
var copytext=meintext;
str.data=copytext;
trans.setTransferData(“text/unicode”,str,copytext.length*[[2]]]]);
var clipid=Components.interfaces.nsic剪贴板;
如果(!clip)返回false;
clip.setData(trans、null、clipid.kGlobalClipboard);
}
}
#COPYTOCLIPBOARD代码#
显然,基于Mozilla的浏览器会要求获得这样做的许可,但我认为这是无法避免的。大多数跨浏览器实现都使用Flash来突破安全限制。顺便说一句,没有W3C标准来访问系统粘贴板
我过去用过。它重量轻、速度快,只需按方框上的说明操作。跨浏览器剪贴板复制(无权限)可以在flash中完成,但需要通过用户交互(如单击事件)触发。@zzbov:我愿意接受其他选择,谢谢分享!