是否有可靠的方法使用Javascript访问客户端计算机的剪贴板?尝试执行此操作时,我仍然遇到权限问题。 Google文档如何执行此操作?他们使用Flash吗?
我的主要目标是IE8,但也想支持FF和Chrome。
我已经看过使用Flash执行此操作的技术,但我正在寻找纯粹的js路线:
Clipboard access using Flash
答案 0 :(得分:10)
由于这是一个很大的安全风险,所有关心安全的浏览器都不允许JS访问剪贴板。
主要原因是许多人将密码放入文本文件中,然后使用剪切和粘贴登录。然后,破解者可以通过破解热门网站并安装一些向他们发送剪贴板内容的JS来从剪贴板中收集密码(以及可能的其他私人信息,例如您刚刚复制的word文档)。
这就是我一直禁用闪光灯的原因。
答案 1 :(得分:3)
不,不是在FF和Chrome中。它适用于IE(不确定7和8,但最终确定为6),以及Flash。这就是为什么总是使用Flash。
答案 2 :(得分:2)
忘掉纯粹的JS。
没有用于访问剪贴板的标准API,并且很少有浏览器实现适当的方法。
Flash是'标准'方法。
答案 3 :(得分:2)
你正在寻找execCommand
功能,至少我能说的最好。以下是一些资源:
Insert text in Javascript contenteditable div
http://www.java2s.com/Code/JavaScriptReference/Javascript-Methods/execCommandisappliedto.htm
不幸的是,这与闪存密封在Flash 9中的安全漏洞相同。由于人们向剪贴板发送垃圾邮件,现在只能通过直接用户交互来访问剪贴板,老实说,这样做更好。我敢打赌,大多数浏览器都有类似的(如果不是更严格的政策)。
答案 4 :(得分:2)
在IE中,这样做非常轻松。对于Firefox,您需要更新users.js和/或prefs.js(您可以在Firefox中使用google进行剪贴板访问)。对于Chrome,您需要编写扩展程序。
在您的扩展程序background_page中,有一个占位符(IFrame) 在您的网页中,有“剪切”,“复制”和“粘贴”等按钮或链接。您的页面上还有一个隐藏的iframe paste_holder,用于取回您的扩展程序的background_page读取的文本。在您的扩展程序的清单文件中,包含如下代码:
"background_page": "mypaste_helper.html",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["mypaste_helper.js"],
"all_frames": true
}
],
"permissions": [
"clipboardRead",
"clipboardWrite",
"tabs"
]
获取对页面上的剪切,复制和复制按钮的引用
cutButton.addEventListener("click", function()
{
get selected content using window.getSelection()
pass that text to handleCut function in mypaste_helper.html
}, false);
copyButton.addEventListener("click", function()
{
get selected content using window.getSelection()
pass that text to handleCopy function in mypaste_helper.html
}, false);
pasteButton.addEventListener("click", function()
{
get content from handlePaste function in mypaste_helper.html
}, false);
回调函数中的获取background_page函数发送的内容 设置带有接收文本的paste_holder框架document.body的innerHTML。
handleCopy和handleCut是相同的
get reference to your iframe document.body as clipboardholder
set innerHTML of the clipboardholder.contentDocument.body with the data passed by mypaste_helper.js
capture selection through window.getSelection()
selection.selectAllChildren(clipboardholder);
document.execCommand('copy')
read contents of the clipboardholder
pass the text back to callback in mypaste_helper.js
handlePaste
get reference to your iframe document.body as clipboardholder
you may want to clear the contents of clipboardholder.contentDocument.body
capture selection through window.getSelection()
selection.selectAllChildren(clipboardholder);
document.execCommand('paste')
read contents of the clipboardholder
pass the text back to callback in mypaste_helper.js
答案 5 :(得分:1)
http://www.rodsdot.com/ee/cross_browser_clipboard_copy_with_pop_over_message.asp正确实现了ZeroClipboard flash对象,并且是跨浏览器。它还讨论了ZeroClipboard的潜在问题以及可能的解决方法。也兼容Flash 10 +。
答案 6 :(得分:0)
这是一个纯JS实现,可以粘贴适用于Google Chrome的图像数据:http://strd6.com/2011/09/html5-javascript-pasting-image-data-in-chrome/
答案 7 :(得分:0)
很明显这个问题,但我仍然有疑问,因为可以选择在javascript中执行此操作,而另一件事是Windows窗体完全可以使用命令
Clipboard.Clear()
任何可以很好的恶意软件。