Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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 使用FireFox、Safari和Chrome在剪贴板上复制/放置文本_Javascript_Dom_Clipboard - Fatal编程技术网

Javascript 使用FireFox、Safari和Chrome在剪贴板上复制/放置文本

Javascript 使用FireFox、Safari和Chrome在剪贴板上复制/放置文本,javascript,dom,clipboard,Javascript,Dom,Clipboard,在Internet Explorer中,我可以使用clipboardData对象访问剪贴板。在FireFox、Safari和/或Chrome中如何才能做到这一点?出于安全考虑,FireFox不允许您将文本放在剪贴板上。但是,使用Flash有一个解决方案 function copyIntoClipboard(text) { var flashId = 'flashId-HKxmj5'; /* Replace this with your clipboard.swf locati

在Internet Explorer中,我可以使用clipboardData对象访问剪贴板。在FireFox、Safari和/或Chrome中如何才能做到这一点?

出于安全考虑,FireFox不允许您将文本放在剪贴板上。但是,使用Flash有一个解决方案

function copyIntoClipboard(text) {

    var flashId = 'flashId-HKxmj5';

    /* Replace this with your clipboard.swf location */
    var clipboardSWF = 'http://appengine.bravo9.com/copy-into-clipboard/clipboard.swf';

    if(!document.getElementById(flashId)) {
        var div = document.createElement('div');
        div.id = flashId;
        document.body.appendChild(div);
    }
    document.getElementById(flashId).innerHTML = '';
    var content = '<embed src="' + 
        clipboardSWF +
        '" FlashVars="clipboard=' + encodeURIComponent(text) +
        '" width="0" height="0" type="application/x-shockwave-flash"></embed>';
    document.getElementById(flashId).innerHTML = content;
}
功能复制到剪贴板(文本){
var flashId='flashId-HKxmj5';
/*将其替换为剪贴板.swf位置*/
var clipboardSWF=http://appengine.bravo9.com/copy-into-clipboard/clipboard.swf';
如果(!document.getElementById(flashId)){
var div=document.createElement('div');
div.id=flashId;
文件.正文.附件(div);
}
document.getElementById(flashId).innerHTML='';
var内容=“”;
document.getElementById(flashId).innerHTML=content;
}
唯一的缺点是需要启用闪存


source当前已失效:(它也是如此)

Firefox确实允许您将数据存储在剪贴板中,但由于安全问题,默认情况下它被禁用。查看如何在Mozilla Firefox知识库中启用它

如果您有很多用户,并且无法配置他们的浏览器,那么amdfan提供的解决方案是最好的。尽管您可以测试剪贴板是否可用,并提供更改设置的链接,但前提是用户精通技术。JavaScript编辑器遵循这种方法。

copyIntoClipboard()函数适用于Flash 9,但它似乎因Flash player 10的发布而被破坏。以下是一个与新的flash player配合使用的解决方案:


这是一个复杂的解决方案,但它确实有效。

我不得不说,这些解决方案都不起作用。我已经尝试了剪贴板解决方案从接受的答案,它不与Flash Player 10工作。我也尝试过ZeroClipboard,有一段时间我对它非常满意

我目前正在自己的网站()上使用它,但我注意到它有一些奇怪的bug。ZeroClipboard的工作方式是,它将一个不可见的flash对象放在页面元素的顶部。我发现,如果我的元素移动了(比如当用户调整窗口大小,我把东西对齐时),ZeroClipboard flash对象就会失去正常,不再覆盖对象。我怀疑它可能还在原来的地方。他们的代码应该停止这种行为,或者将其重新粘贴到元素中,但似乎效果不好

所以。。。在BlogTrog的下一个版本中,我想我会效仿我在野外看到的所有其他代码高亮器,删除我的“复制到剪贴板”按钮-(


(我注意到dp.syntaxighiglighter的复制到剪贴板现在也被破坏了。)

在线电子表格钩住Ctrl+C、Ctrl+V事件,并将焦点转移到隐藏的TextArea控件,或者将其内容设置为所需的新剪贴板内容进行复制,或者在事件完成粘贴后读取其内容


另请参见

闪存解决方案的一个轻微改进是使用swfobject检测闪存10:

然后,如果显示为flash 10,请尝试使用javascript加载Shockwave对象。Shockwave可以读取/写入剪贴板(在所有版本中),也可以使用行话中的copyToClipboard()命令。

适用于flash 10和所有启用flash的浏览器

此外,ZeroClipboard已经更新,以避免页面滚动导致Flash电影不再位于正确位置的错误


因为这种方法“需要”用户点击一个按钮进行复制这对用户来说是一种方便,并且没有任何恶意的事情发生。

我已经使用了Github,它是一个基于Flash的简单按钮。如果用户不需要设置样式,并且喜欢在服务器端预先插入要粘贴的内容,那么它就可以正常工作。

尝试创建一个内存全局变量来存储选择,然后另一个函数可以访问变量并执行粘贴操作,例如

var memory = '';//outside the functions but within the script tag.

function moz_stringCopy(DOMEle,firstPos,secondPos) {

var copiedString = DOMEle.value.slice(firstPos, secondPos);
memory = copiedString;

}

function moz_stringPaste(DOMEle, newpos) {

    DOMEle.value = DOMEle.value.slice(0,newpos) + memory + DOMEle.value.slice(newpos);

}

这个问题太老了,但我在任何地方都看不到这个答案

检查此链接:

正如大家所说,出于安全原因,默认情况下是禁用的。上面的链接显示了如何启用它的说明(通过在firefox或user.js中编辑about:config)


幸运的是,有一个名为“AllowClipboardHelper”的插件,只需点击几下即可简化操作。但是,您仍然需要指导网站访问者如何在firefox中启用访问功能。

如果您支持flash,您可以使用和使用flashvars文本来设置文本

这是我用来复制的,如果不支持以下选项,您可以将其设置为额外选项:

对于Internet Explorer:window.clipboardData.setData(数据格式,文本)和window.clipboardData.getData(数据格式)

您可以使用DataFormat的文本和Url来获取数据和设置数据

以及删除数据:

您可以使用DataFormat的文件、HTML、图像、文本和URL。PS:您需要使用window.clipboardData.clearData(DataFormat)


对于其他不支持window.clipboardData和swf flash文件的文件,您也可以使用键盘上的control+c按钮,用于windows和mac,其命令+c来自加载项代码:


如果其他人正在寻找如何从chrome代码中实现这一点,您可以使用NSICippboardHelper界面,如下所述:

现在是2015年夏天,由于Flash引起了如此多的混乱,我想我应该为这个问题添加一个新的答案,完全避免使用它

是一个很好的实用程序,允许将文本或html数据复制到剪贴板。它非常易于使用,只需包含.js并使用如下内容:

<button id='markup-copy'>Copy Button</button>

<script>
document.getElementById('markup-copy').addEventListener('click', function() {
  clipboard.copy({
    'text/plain': 'Markup text. Paste me into a rich text editor.',
    'text/html': '<i>here</i> is some <b>rich text</b>'
  }).then(
    function(){console.log('success'); },
    function(err){console.log('failure', err);
  });

});
</script>
复制按钮
document.getElementById('markup-copy')。addEventListener('click',function(){
剪贴板。复制({
“文本/纯文本”:“标记文本。将我粘贴到富文本编辑器中。”,
“text/html”:“这里是一些富文本”
document.execCommand('copy');
document.getElementById('myText').select();
var ClipboardHelper = { // as Object

copyElement: function ($element)
{
   this.copyText($element.text())
},
copyText:function(text) // Linebreaks with \n
{
    var $tempInput =  $("<textarea>");
    $("body").append($tempInput);
    $tempInput.val(text).select();
    document.execCommand("copy");
    $tempInput.remove();
}};
 ClipboardHelper.copyText('Hello\nWorld');
 ClipboardHelper.copyElement($('body h1').first());
function copyStringToClipboard (string) {
    function handler (event){
        event.clipboardData.setData('text/plain', string);
        event.preventDefault();
        document.removeEventListener('copy', handler, true);
    }

    document.addEventListener('copy', handler, true);
    document.execCommand('copy');
}
// ================================================================================
// ClipboardClass
// ================================================================================
var ClipboardClass = (function() {


   function copyText(text) {
    // Create temp element off-screen to hold text.
        var tempElem = $('<textarea style="position: absolute; top: -8888px; left: -8888px">');
        $("body").append(tempElem);

        tempElem.val(text).select();
        document.execCommand("copy");
        tempElem.remove();
   }


    // ============================================================================
   // Class API
   // ============================================================================
    return {
        copyText: copyText
    };
})();