使用FireFox,Safari和Chrome复制/将文本放在剪贴板上

时间:2020-03-06 14:39:39  来源:igfitidea点击:

在Internet Explorer中,我可以使用剪贴板数据对象来访问剪贴板。如何在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;
}

唯一的缺点是,这需要启用Flash。

来源目前已死:http://bravo9.com/journal/copying-text-into-the-clipboard-with-javascript-in-firefox-safari-ie-opera-292559a2-cc6c-4ebf-9724-d23e8bc5ad8a/这就是Google缓存)

Firefox确实允许我们将数据存储在剪贴板中,但是由于安全隐患,默认情况下将其禁用。请参阅Mozilla Firefox知识库中的"授予对剪贴板的JavaScript访问权限"中的启用方法。

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

copyIntoClipboard()函数适用于Flash 9,但似乎已随Flash Player 10的发布而中断。以下是可与新Flash Player配合使用的解决方案:

http://bowser.macminicolo.net/~jhuckaby/zeroclipboard/

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

我不得不说,这些解决方案都没有真正起作用。我已经从可接受的答案中尝试了剪贴板解决方案,但是它不适用于Flash Player10. 我也尝试了ZeroClipboard,我对此感到非常满意。

我目前在自己的网站(http://www.blogtrog.com)上使用它,但是我一直注意到它的怪异错误。 ZeroClipboard的工作方式是将不可见的Flash对象放在页面上元素的顶部。我发现,如果我的元素移动了(例如当用户调整窗口大小并且我对齐了东西时),ZeroClipboard Flash对象便摆脱了束缚,不再覆盖该对象。我怀疑它可能仍然坐在原来的位置。他们的代码应该停止该代码,或者将其重新粘贴到该元素上,但是似乎效果不佳。

因此,在下一个版本的BlogTrog中,我想我会照常使用我在野外看到的所有其他代码突出显示,并删除"复制到剪贴板"按钮。 :-(

(我注意到dp.syntaxhiglighter的"复制到剪贴板"现在也已损坏。)

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

还可以使用Javascript在Firefox,Safari和Chrome中读取剪贴板吗?

Flash解决方案的一个小改进是使用swfobject检测Flash 10:

http://code.google.com/p/swfobject/

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

http://www.rodsdot.com/ee/cross_browser_clipboard_copy_with_pop_over_message.asp与Flash 10和所有启用Flash的浏览器一起使用。

还对ZeroClipboard进行了更新,以避免提及页面滚动所引起的错误,从而导致Flash电影不再位于正确的位置。

由于该方法"要求"用户单击按钮以进行复制,因此这给用户带来了便利,并且没有发生任何恶意事件。

我已经使用了Github的Clippy来满足我的需要,它是基于Flash的简单按钮。如果不需要样式,并且对预先插入要粘贴到服务器端的内容感到满意,则可以正常工作。