使用Javascript访问剪贴板 - 没有Flash?

时间:2009-11-09 14:57:38

标签: javascript flash clipboard

是否有可靠的方法使用Javascript访问客户端计算机的剪贴板?尝试执行此操作时,我仍然遇到权限问题。 Google文档如何执行此操作?他们使用Flash吗?

我的主要目标是IE8,但也想支持FF和Chrome。

我已经看过使用Flash执行此操作的技术,但我正在寻找纯粹的js路线:
Clipboard access using Flash

8 个答案:

答案 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读取的文本。在您的扩展程序的清单文件中,包含如下代码:

的manifest.json

"background_page": "mypaste_helper.html",
"content_scripts": [
    {
        "matches": ["<all_urls>"],
        "js": ["mypaste_helper.js"],
        "all_frames": true
    }
],
"permissions": [
    "clipboardRead",
    "clipboardWrite",
    "tabs"  
]

mypaste_helper.js

获取对页面上的剪切,复制和复制按钮的引用

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。

mypaste_helper.html

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()

参考:System.Windows.Forms

任何可以很好的恶意软件。