Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建将选定文本复制到客户端剪贴板的HTML按钮?_Javascript_Html_Copy_Clipboard - Fatal编程技术网

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:我愿意接受其他选择,谢谢分享!