`
yiminghe
  • 浏览: 1461446 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

获取剪贴板数据

阅读更多

兼容性:

 

获取剪贴板数据这块各个浏览器间存在很大的兼容性问题:

 

ie:

 

通过监听 paster 或 beforepaste ,在全局变量 clipboardData 中取得黏贴数据:

 

onpaste=function(){

alert(clipboardData.getData("Text"););

}

 

但局限性在于只能取得文本数据而不能取得富文本html.

 

 

firefox:

 

ff 提供了丰富的 api 接口,但需要用户提升权限 这一条就使得 ff 的 api形同虚设。

 

 

chrome:

 

支持 w3 clipboard api (借鉴 ie,不过 clipboardData 和事件关联),可以随意取得 html/text 格式的剪贴板内容,十分方便:

 

 

onpaste=function(e){
e.clipboardData.getData("text/html"); // html 格式
e.clipboardData.getData("text/plain");// 纯文本格式
}

 

 

换个思路自己实现

 

其实可以完全绕开浏览器的剪贴板相关 api,经过一些 trick,可以取得用户的粘贴信息,主要关注以下事件:

 

beforepaste : ie only. 在黏贴的数据放到页面前触发,返回 false 则允许右键菜单有黏贴选项。

 

paste :

 

   ie : 黏贴的数据放到页面后触发。

   firefox/chrome : 黏贴的数据放到页面前触发。

 

 

主要实现思路为在将数据黏贴到 a 输入区域前,将焦点定位到隐藏的b输入区域,使得用户数据被黏贴在 b 区域,然后从 b 区域中取出处理后再填入 a 区域,并恢复焦点到 a 区域:

 

 

$("#a").on(ie?"beforepaste":"paste",function(e){		
		$("#b").text("");
		$("#b")[0].focus();
		setTimeout(function(){
			$("#a").text($("#b").text().replace(/[^\d]+/,""));
			$("#a")[0].focus();
		},0);
	});
});
 

这样就可以间接得取得剪贴板数据进行处理。

 

不过很有必要进行一些复杂的其它处理 ( 待续 ):对 a 进行选择区域位置的保存与恢复以及替换被黏贴的部分内容.

 

event paste demo @ google code

 

refer

 

http://stackoverflow.com/questions/2176861/javascript-get-clipboard-data-on-paste-event-cross-browser

http://msdn.microsoft.com/en-us/library/ms536905%28v=VS.85%29.aspx

https://developer.mozilla.org/en/DOM/element.onpaste

http://help.dottoro.com/ljxqbxkf.php

http://almaer.com/blog/supporting-the-system-clipboard-in-your-web-applications-what-a-pain

 

 

分享到:
评论

相关推荐

    jQuery获取剪贴板内容的方法

    然后,JavaScript可以与Flash应用通信,来获取剪贴板数据。这种方法虽然可以绕过浏览器的限制,但需要用户安装Flash插件,并且随着HTML5的发展和各大浏览器厂商开始弃用Flash,这种做法已不再推荐。 #### 实现示例 ...

    剪贴板数据 获取 源程序 代码

    在获取剪贴板数据时,应尊重用户隐私并遵守相关的数据保护法规。不要无故读取剪贴板数据,特别是在未经用户同意的情况下。 8. **代码示例** 以下是一个简单的Python代码示例,展示如何使用`pyperclip`库获取剪贴...

    delphi 获取剪切板图像_获取剪切板图像_delphi源码_poolz1i_

    3. **获取剪贴板数据** 如果剪贴板中有CF_DIB格式的图像数据,我们可以使用`EmptyClipboard`清空剪贴板,然后通过`GetClipboardData`函数获取数据。返回值是一个全局内存句柄,我们可以用`GlobalLock`锁定这段内存,...

    写入和获取剪贴板中的数据VC6.0源代码

    剪贴板操作主要包括打开、关闭剪贴板、设置和获取剪贴板数据等步骤。 1. **打开和关闭剪贴板**: 使用`OpenClipboard()`函数打开剪贴板,这允许当前进程访问剪贴板内容。在完成操作后,必须调用`CloseClipboard()`...

    易语言监视剪贴板文本内容源码

    易语言通过导入Windows API(应用程序接口)来实现对剪贴板的操作,例如`OpenClipboard`、`EmptyClipboard`、`GetClipboardData`、`CloseClipboard`等,这些函数用于打开、清空、获取剪贴板数据。 2. 定义剪贴板...

    JS 巧妙获取剪贴板数据 Excel数据的粘贴

    在JavaScript中,获取剪贴板数据一直是个棘手的问题,因为出于安全考虑,浏览器对剪贴板的操作进行了严格的限制。然而,在某些特定场景下,比如在网页中实现Excel数据的粘贴,这种功能是必要的。这里我们将探讨一种...

    用C#的Clipboard类实现获取剪贴板的类型信息

    6. `GetDataObject()`:获取剪贴板上的数据对象,包含了所有类型的数据。 获取剪贴板的类型信息,我们需要使用`GetDataObject()`方法。此方法返回一个`IDataObject`接口的实例,它包含了剪贴板上的所有数据。`...

    易语言源码易语言剪贴板数据监视源码.rar

    4. 数据处理:获取剪贴板数据后,源码可能会对其进行解析和处理,比如将文本数据展示在界面上,或者保存到文件。 5. 异常处理:在编程中,异常处理是必不可少的一部分。易语言提供了`错误处理`结构来捕获和处理可能...

    delphi获取处理剪贴板中Excel中的数据,封装成自定义的数据集

    本篇文章将详细探讨如何在Delphi中获取剪贴板中的Excel数据,并将其封装成自定义的数据集。 首先,我们要理解剪贴板在操作系统中的作用。剪贴板是操作系统提供的一种临时存储区域,用户可以将数据复制到剪贴板,...

    mfc使用api获取系统剪贴板中的数据并分类显示

    获取剪贴板数据则涉及到`EnumClipboardFormats`函数,它用于枚举剪贴板上可用的数据格式。 描述中提到的“实时显示当前剪贴板中的所有类型数据”,这需要监听剪贴板的改变。可以使用`RegisterClipboardFormat`创建...

    剪贴板查看器_查看器_剪贴板_VB_

    例如,可以使用`OpenClipboard`,`GetClipboardData`和`CloseClipboard`等函数来获取剪贴板数据。 3. **数据类型处理**:剪贴板可以承载多种数据格式,如文本、图像、HTML等。我们需要根据不同的数据格式进行处理。...

    使用剪贴板实现进程通信

    四、获取剪贴板数据 当另一个进程需要读取剪贴板数据时,可以调用 `GetClipboardData` 函数。这个函数会返回一个指向剪贴板数据的指针,但需要注意的是,剪贴板数据并不总是立即可用,因此需要检查 `OpenClipboard` ...

    易语言取剪贴板非文本数据.zip易语言项目例子源码下载

    在自动化工具中,获取剪贴板数据可以实现跨程序的信息传递。 6. 源码学习:压缩包中的源码实例,是学习这一知识点的宝贵资源。通过阅读和分析代码,可以加深对易语言剪贴板操作的理解,并能动手实践,提升编程能力...

    易语言源码易语言取剪贴板非文本数据.rar

    3. **数据格式判断**:在获取剪贴板数据前,需要先判断剪贴板上是否存在非文本数据。这通常通过`检查剪贴板数据存在`命令来完成,指定特定的数据格式,如位图、富文本等。 4. **数据转换与处理**:对于非文本数据,...

    剪贴板操作.rar

    4. 获取剪贴板数据:调用`GetClipboardData(CF_TEXT)`获取文本数据,然后释放内存。 5. 关闭剪贴板:调用`CloseClipboard()`结束剪贴板操作。 示例程序可能如下: ```cpp #include #include void ...

    易语言源码易语言拦截剪贴板的数据.rar

    在易语言中,这可能通过调用底层Windows API函数来实现,比如`OpenClipboard`、`EmptyClipboard`、`GetClipboardData`和`CloseClipboard`等函数,它们分别用于打开剪贴板、清空剪贴板、获取剪贴板数据和关闭剪贴板。...

    使用剪贴板实现程序间的数据交换

    这些函数包括`OpenClipboard()`打开剪贴板,`EmptyClipboard()`清空剪贴板,`SetClipboardData()`设置剪贴板数据,`GetClipboardData()`获取剪贴板数据,以及`CloseClipboard()`关闭剪贴板等。 4. **数据放置与读取...

    监听剪贴板Java demo

    3. 获取剪贴板数据: 剪贴板上的数据通常以`ClipData`对象的形式存在,可以通过`ClipboardManager.getPrimaryClip()`方法获取。 ```java ClipData clipData = clipboard.getPrimaryClip(); if (clipData != null...

    JS实现获取剪贴板内容的方法

    使用剪贴板API时,应尊重用户隐私并谨慎处理剪贴板数据。不要无故读取或修改剪贴板内容,避免滥用权限。同时,注意处理可能出现的错误和异常,确保代码健壮性。 总的来说,获取剪贴板内容在JavaScript中可以通过...

    c++实现将剪贴板内容保存为bmp图

    - 使用`OpenClipboard(NULL)`打开剪贴板,`EmptyClipboard()`清空剪贴板内容,`GetClipboardData(CF_DIB)`获取剪贴板中的DIB(设备无关位图)数据,最后用`CloseClipboard()`关闭剪贴板。 2. **DIB(Device ...

Global site tag (gtag.js) - Google Analytics