使用FireFox,Safari和Chrome复制/将文本放在剪贴板上
在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的简单按钮。如果不需要样式,并且对预先插入要粘贴到服务器端的内容感到满意,则可以正常工作。