我注意到blog post from Google提到,如果你使用的是最新版本的Chrome,可以将剪贴板上的图片直接粘贴到Gmail消息中.我在我的Chrome版本(12.0.742.91beta-m)上试过了,使用控制键或上下文菜单可以很好地工作.

根据这一行为,我需要假设Chrome中使用的最新版本的webkit能够处理Javascript Paste事件中的图像,但是我找不到任何关于这种增强的引用.我相信ZeroClipboard绑定到按键事件来触发它的flash功能,因此不能通过上下文菜单工作(另外,ZeroClipboard是跨浏览器的,文章说这只适用于Chrome).

那么,这是如何工作的?在哪里对Webkit(或Chrome)进行了增强,从而实现了该功能?

推荐答案

我花了一些时间来试验这个.它似乎有点像新的Clipboard API spec.您可以定义"粘贴"事件处理程序并查看事件.剪贴簿数据.并对其调用getAsFile()以获取Blob.一旦你有了一个斑点,你可以用FileReader来看看里面有什么.这就是你如何为你刚刚粘贴在Chrome上的东西获取数据url的方法:

document.onpaste = function (event) {
    var items = (event.clipboardData || event.originalEvent.clipboardData).items;
    console.log(JSON.stringify(items)); // might give you mime types
    for (var index in items) {
        var item = items[index];
        if (item.kind === 'file') {
            var blob = item.getAsFile();
            var reader = new FileReader();
            reader.onload = function (event) {
                console.log(event.target.result); // data url!
            }; 
            reader.readAsDataURL(blob);
        }
    }
};

一旦有了数据url,就可以在页面上显示图像.如果您想上传它,可以使用readAsBinaryString,或者使用FormData将其放入XHR.

编辑:请注意,该项目的类型为DataTransferItem.JSON.stringify可能在项列表上不起作用,但是当您循环遍历项时,您应该能够获得MIME类型.

Html相关问答推荐

如何在水平对齐(居中)元素的右侧创建迪夫.在tailwind 或CSS中

将多个内联元素置于中心,而无需访问父级上的CSS

HTML5章节或文章

为什么这个高度为100%的页面会出现滚动条?

如何在Vim中删除Html标签?

是否可以部分列出一个HTML有序列表

如何在将文本垂直居中的同时将文本右对齐?

滚动两个不同高度的DIV;一个等待另一个

文本幻灯片显示动画

如何为高度较小的块制作边框动画?

添加带有悬停动画的喜欢图标

使用修饰键微调 HTML 输入范围中的值

发送带有图像的Google文档作为HTML格式的邮件正文不再起作用

Flex布局中,当父元素高度较高时,交叉轴上出现额外的空白问题.

如何将元素均匀分布到容器的边缘?

在包含 html 标签的字符串的子字符串中应用不同的样式

使用 css 将内容居中并向左对齐?

我如何让这个动画播放,然后停止,然后在设定的时间后再次播放? (CSS)

使用 CSS 样式化进度条

嵌套固定定位的 Div 滚动条渗透到前景中的 Div