通过Ctrl + V上传屏幕截图

时间:2013-06-17 19:38:28

标签: javascript google-chrome

据我所知,通过javascript挂钩paste事件来上传文件是not possible
但我在trello.com上发现了这样的事情 如何重现:

只在Windows上使用谷歌浏览器我无法在linux ff或chrome上重现它

  1. 制作新卡
  2. 点击它 - >它的形式出现了
  3. 点击评论文字区域
  4. PrnScr 制作截图, Ctrl + V - >上传过程开始(绿色 右上角的进度条)
  5. 那么他们是如何实现的呢?

1 个答案:

答案 0 :(得分:1)

在Trello中,他们使用在粘贴事件中注册的事件处理程序,基本上访问event.clipboardData.items

javascript代码(here)缩小了,因此不是特别容易阅读,但它基本上归结为应用其他question

中的技巧

粘贴处理程序的摘录:

        c.prototype.paste = function (b) {
            var c, f, e, g, h, k, m, l;
            e = null;
            h = this.handlers;
            for (g in h)
                if (c = h[g], null != c.paste) {
                    e = c.paste;
                    break
                }
            if (null != e && (f = null != (k = null != (m = b.originalEvent) ? null != (l = m.clipboardData) ? l.items : void 0 : void 0) ? k : [], b = function (b) {
                return _.detect(f, function (c) {
                    return c.type === b
                })
            }, !b("text/plain") && (b = b("image/png"), null != b && (b = b.getAsFile(), null != b)))) return j.validFileSize(b) ? (n("Keyboard Shortcuts", "Paste - Upload Image From Clipboard"), e(b)) : P.show("File size exceeds 10mb limit",
                "error", "upload", 5E3)
        };