0

我的用户需要截屏他们的错误消息抛出我的网站。他们应该直接从我网站的剪贴板粘贴,而不是转换 jpeg。首选浏览器是火狐。我尝试使用 ZeroClipBoard,但它适用于文字而不是图像。如果有人可以建议和分享任何参考链接,我们将不胜感激。

4

2 回答 2

2

简单的答案:你不能。没有从剪贴板读取二进制数据的网络标准方法,我也不相信 Flash 或 Silverlight 也这样做(Flash可以从剪贴板公开位图数据,但只能在 AIR 下,即不在浏览器上下文中)。

您可以编写一个小型桌面实用程序,供您的用户下载并运行,它会截取屏幕截图并为他们上传,但如果不这样做,您的用户将不得不将图像粘贴到 Paint,保存到磁盘,然后使用<input type="file">.

于 2013-07-11T04:44:26.530 回答
0

我不确定与 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' );
?>
于 2013-07-11T05:14:15.763 回答