我的用户需要截屏他们的错误消息抛出我的网站。他们应该直接从我网站的剪贴板粘贴,而不是转换 jpeg。首选浏览器是火狐。我尝试使用 ZeroClipBoard,但它适用于文字而不是图像。如果有人可以建议和分享任何参考链接,我们将不胜感激。
2 回答
简单的答案:你不能。没有从剪贴板读取二进制数据的网络标准方法,我也不相信 Flash 或 Silverlight 也这样做(Flash可以从剪贴板公开位图数据,但只能在 AIR 下,即不在浏览器上下文中)。
您可以编写一个小型桌面实用程序,供您的用户下载并运行,它会截取屏幕截图并为他们上传,但如果不这样做,您的用户将不得不将图像粘贴到 Paint,保存到磁盘,然后使用<input type="file">
.
我不确定与 Mozilla 的兼容性,但您应该查看 onpaste 事件
https://developer.mozilla.org/en-US/docs/Web/API/element.onpaste
和 event.clipboarddata
http://www.w3.org/TR/clipboard-apis/
交叉兼容性可能会成为一个问题。
您可以查看 wordpress 插件 Image Elevator http://wordpress.org/plugins/image-elevator/的源代码
查看 admin/assets/js/image-elevator-global.js 以获取想法。
查看插件后,我得到了以下代码。它会使用您粘贴的任何内容重新加载页面图像。适用于chrome,但不适用于firefox。
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script>
document.onpaste = function (e) {
var items = e.clipboardData.items;
for (var i = 0; i < items.length; ++i) {
// uploads image on a server
var img = items[i].getAsFile();
var oData = new FormData();
oData.append('file', img);
var req = new XMLHttpRequest();
req.open("POST", "test-pastup.php");
req.onreadystatechange = function() {
setTimeout(function() {
var img = $('img').clone();
$('img').remove();
$('body').prepend(img);
}, 100);
}
req.send(oData);
return;
}
}
</script>
</head>
<body>
<img src="aaa.png" />
<input/>
</body>
</html>
对于服务器端 - test-pastup.php
<?php
$source = $_FILES['file']['tmp_name'];
move_uploaded_file( $source, 'aaa.png' );
?>