关于剪切板

因为最近在做图文混排的复制,但又鉴于网上资料不多,也说得不是很明确,所以我想总结一下我所知道的和自己考虑的做法。

windows平台,剪切板支持好几种格式,这个我还没有深入研究其他格式,暂时只对CF_TEXT,和CF_BITMAP等有点理解。

当时有点好奇qq的图文混排是怎么做到的,但是并没有太多资料给到提示,可能大家的做法都是自定义一种格式。因为我找不

到一些代码去提点我自定义格式,到底是怎么一回事,所以我目前的想法只是当选中内容中有图片时,会用<img></img>

这样的标签把图片的路径放进去CF_DSPTEXT。但我觉得这种做法不好,因为万一文字本身就包含了这种格式呢?

有没有可能利用剪切板支持多种格式同时设置的特性做一些手脚呢?

有个问题,为什么word的图文混排不能直接粘贴到qq?应该就是word用了自定义格式吧?(或者有其他实现方法?)

word是可以直接以图片的模式复制到画图工具的。如果一开始的假设是对的(word用了自定义格式),那么作为自家产品的

画图工具,知道了自定义格式的定义方法,然后解释出来,再生成一张图文结合的图在画图工具上显示。

虽然我不知道这个想法对不对,但至少猜测还算合理,哈哈。但同时我也不用多想了,证明qq也没法获得word的复制方法,

不然应该就能粘贴进输入框了。(吐槽君A:别傻啦,人家只是不屑于粘贴word的图文。吐槽君B:你的版本太低了吧,赶紧更新你的qq)

对于浏览器貌似就可以研究一下了,因为qq可以粘贴来自浏览器的图文。

(不确定是否所有浏览器都可以,貌似测试了chrome是可以的,还有ff单复制图片,获得的是图片url)

毕竟在windows下的浏览器也会用到windows的剪切板吧,所以SetClipboardData这个api也是会用到的。

(吐槽君:chrome好像是有源码的吧,你怎么不下个来看看有没有这方面的实现,瞎扯个什么,你不专业,你滚)

事实证明当粘贴来自chrome和ff的数据时,GetClipboardData(CF_TEXT)确实是能获得数据的。

but.....这些数据貌似没有任何图片相关的东西啊。(看来我想的还是太简单了,另外我无意中发现一点貌似chrome拖拽的是否会发现一个<img>的标签)

然后我很没出息的看了一堆关于浏览器间兼容剪切板的文章,发现原来关注这个方面的人还不少啊。分享几篇确实是好的文章

(爆料君:其实你就觉得人家写得很专业的样子,但是自己也没有亲自试验过,就贴出来,能不能负责任点?我:反正我的随笔就我自己看,你吹得我涨咩。。。。)

but依然没有找到什么对我十分有用线索,下一步,我打算把所有格式都测试一遍,看有没有可能浏览器的粘贴格式用到什么特殊的格式

(吐槽君:你丫,叫你下代码你不下,你还要自己猜啊,你不专业你滚)

顺便附上一下我认为写得不错的一些文章:

1.来自知乎的ctrl + V的讨论 : http://www.zhihu.com/question/20893119

2.来自多浏览器的复制粘贴的研究:https://ruby-china.org/topics/17266

3.据说以前的浏览器复制粘贴时依赖于flash的,这个就有说到jQuery ZeroClipboard的这个api:http://www.cnblogs.com/peunzhang/p/3324727.html

4.貌似现在可以用这样的方法:http://blog.csdn.net/lee_magnum/article/details/17761441

然后这些都不关我事啊。。。。我要研究windows方面的啊。。。。

哎,暂时对如何获取浏览器复制的图文还需要继续研究,有没有人指点一下呢?如果有进展再更新一下

时间: 2024-11-01 20:56:42

关于剪切板的相关文章

js复制内容到剪切板,兼容pc和手机端,支持Safari浏览器

最近,一些项目中用到监听用户复制.剪切的操作. 案例1.在PC端,当用户获得一个京东卡的使用券,当用户使用ctrl + C复制得到的使用券时,将使用券的代号复制到粘贴板,以便于用户ctrl+v进行粘贴. 案例2:在移动端(android 和 iOS端),用户获得邀请码之后,可以使用一键复制的功能,将邀请码复制到剪切板,然后在app中进行兑换. 使用jQuery中的方法监听用户的剪切.复制.粘贴的行为 $("#cut").on("cut",function(){ al

复制到剪切板 兼容(IE/FF/Chrome/..)

最近做一个复制到剪切板的功能   在网上找了很多都不好用 最后发现在了  这篇文章很不错  简洁好用   贴出来  希望能帮到更多人 原文地址:http://www.lsproc.com/wiki/snippets:copytoclipboard 此代码修改自 discuz!, 简易实现 <script> var clipboardswfdata; var setcopy_gettext = function(){ clipboardswfdata = document.getElementB

C# 线程间不能调用剪切板的问题

最近做一个项目,需要用到线程,而且要用到剪切板,创建了一个子线程之后发现在子线程中剪切板上获取不到数据,当时特别纳闷,上网查资料,最后终于搞定,现将解决方法归纳如下: 第一步: public void btnAutoFocus_Click(object sender,EventArgs e) { Thread myThread = new Thread(msc.AutoFocusArithmetic); //注意,一般启动一个线程的时候没有这句话,但是要操作剪切板的话这句话是必需要加上的,因为剪

iOS社交分享Twitter、Facebook、复制到剪切板、LINE、及邮件

准备 首先要引进如下三个framework: MessageUI.framework Social.framework Accounts.framework 并在实现这几个方法的地方引入以下几个头文件 #import <MessageUI/MFMailComposeViewController.h> #import <Social/Social.h> #import <Accounts/Accounts.h> Twitter及Facebook 其中urlStr为我分享的

复原所有面板设置+剪切板

* 复原所有面板设置 * 文件 -> 新建 -> 剪切板 复原所有面板设置+剪切板,码迷,mamicode.com

vi中系统剪切板的设置

在vi中,如果编译时没有clipboard属性,将vi中的内容拷贝到系统剪切板有些麻烦.可以用如下的方法,查看vi 是否支持系统剪切板的功能: [email protected]:~$ vi --version | grep clipboard -clipboard +iconv +path_extra -toolbar +eval +mouse_dec +startuptime -xterm_clipboard 如果如上所示,不支持系统剪切板功能,可以如下在.vimrc中的设置,解决问题: "

window下vnc连接ubuntu及双向剪切板功能

window下实现vnc连接远程ubuntu :http://www.linuxidc.com/Linux/2016-06/132442.htm 关于连接:上面文章可能会有个问题,锁屏状态下会无法连接:所以额外加两步: 1 开启自动登陆 2 锁屏关闭 双向剪切板:https://my.oschina.net/seava/blog/226966 关于易用性行:sudo vim /etc/rc.local 然后写入 vncconfig -nowin &   如此重启剪切板功能会一直支持(中文乱码解决

jquery实现点击复制到剪切板

1.必须有先引入 jquery库 <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/jquery.zclip.min.js"></script> 2.js实现点击复制的代码 <script type="text/jav

Android剪切板(ClipboardManager) 复制文本

Android也有剪切板(ClipboardManager) 注意:导包的时候 API 11之前:  android.text.ClipboardManagerAPI 11之后:  android.content.ClipboardManager /** * 实现文本复制功能 * add by wangqianzhou * @param content */ public static void copy(String content, Context context) { // 得到剪贴板管理

android实现文本复制到剪切板功能(ClipboardManager)

Android也有剪切板(ClipboardManager),可以复制一些有用的文本到剪贴板,以便用户可以粘贴的地方使用,下面是使用方法 注意:导包的时候 API 11之前: android.text.ClipboardManagerAPI 11之后: android.content.ClipboardManager 复制代码代码如下: /** * 实现文本复制功能 * add by wangqianzhou * @param content */  public static void cop