谷歌浏览器 怎么用js复制东西到剪贴板

谷歌浏览器 怎么用js复制东西到剪贴板,第1张

代码如下:

JS复制内容到剪贴板: 兼容IE、Firefox、Chrome、Safari所有浏览器

function copyToClipboard(txt) {

if(windowclipboardData)

{

windowclipboardDataclearData();

windowclipboardDatasetData("Text",txt);

alert("网址复制成功!快用Ctrl+V粘贴到QQ,MSN中发送给好友吧!")

}

else if(navigatoruserAgentindexOf("Opera") != -1)

{

windowlocation = txt;

alert("网址复制成功!快用Ctrl+V粘贴到QQ,MSN中发送给好友吧!")

}

else if (windownetscape)

{

try {

netscapesecurityPrivilegeManagerenablePrivilege("UniversalXPConnect");

}

catch (e)

{

alert("被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将'signedappletscodebase_principal_support'设置为'true'");

}

var clip = Componentsclasses['@mozillaorg/widget/clipboard;1']createInstance(ComponentsinterfacesnsIClipboard);

if (!clip) return;

var trans = Componentsclasses['@mozillaorg/widget/transferable;1']createInstance(ComponentsinterfacesnsITransferable);

if (!trans) return;

transaddDataFlavor('text/unicode');

var str = new Object();

var len = new Object();

var str = Componentsclasses["@mozillaorg/supports-string;1"]createInstance(ComponentsinterfacesnsISupportsString);

var copytext = txt;

strdata = copytext;

transsetTransferData("text/unicode",str,copytextlength2);

var clipid = ComponentsinterfacesnsIClipboard;

if (!clip) return false;

clipsetData(trans,null,clipidkGlobalClipboard);

alert("网址复制成功!快用Ctrl+V粘贴到QQ,MSN中发送给好友吧!")

}

}

copyToClipboard('ABCD')

这些代码都是一样的,不存在原创与复制

放文字试过,方没试过。

不过可以给你参考一下js~,你自己试试,成功了可以告诉我。

script

function copyToClipboard()

{

var d = documentall("source")value;

windowclipboardDatasetData('text', d);

}

/script

BODY

button onclick="copyToClipboard();"拷贝/button

input type="text" size=20 id="source" value="测试数据"

br

button onclick="alert(windowclipboardDatagetData('text'));"显示/button

button onclick="windowclipboardDataclearData('text');"清空/button

/BODY

原理分析

提取 *** 作:复制=>粘贴=>上传

在这个 *** 作过程中,我们需要做的就是:监听粘贴事件=>获取剪贴板里的内容=>发请求上传

为方便理解下文,需要先明白几点:

我们只能上传网页图(在网页上右键,然后复制)和截图(截图工具截的,eg:qq截图),不能粘贴上传系统里的(从桌面上、硬盘里复制),他们是存在完全不同的地方的。 截图工具截的图与在网页点击右键复制的图是有些不同的,因此处理方式也不一样。 知悉paste event这个事件:当进行粘贴(右键paste/ctrl+v) *** 作时,该动作将触发名为'paste'的剪贴板事件,这个事件的触发是在剪贴板里的数据插入到目标元素之前。如果目标元素(光标所在位置)是可编辑的元素(eg:设置了contenteditable属性的div。textarea并不行。),粘贴动作将把剪贴板里的数据,以最合适的格式,插入到目标元素里;如果目标元素不可编辑,则不会插入数据,但依然触发paste event。数据在粘贴的过程中是只读的。此段是翻译于w3org_the-paste-action。 可惜的是,经过试验,发现chrome(当前最新版)、firefox(当前最新版)、ie11对paste事件的实现并不是完全按照w3c来的,各自也有区别(w3c的paste标准也因此只是草案阶段)。

test代码如下:

chrome:

<textarea ></textarea> <div contenteditable style="width: 100px;height: 100px; border:1px solid"> </div> <script> documentaddEventListener('paste', function (event) { consolelog(event) }) </script>

event有clipboardData属性,且clipboardData有item属性,clipboardDataitem中的元素(对象)有type和kind属性; 无论在哪进行粘贴,均可触发paste事件; 在div(未特殊声明时,本文div均指设置了contenteditable属性的div) 里粘贴截图,不显示。imgsrc为base64编码字符串; 在div里粘贴网页,直接显示,imgsrc为地址。

firefox:

event有clipboardData属性,clipboardData没有item属性; 只有在textarea里或者可编辑的div(里才粘贴才触发paste事件; 在div里粘贴截图,直接显示,imgsrc为base64编码字符串; 在div里粘贴网页,表现同chrome。

ie11:(不截图了,可自行试验,其他浏览器同理<( ̄▽ ̄)/,因为懒)

event没有clipboardData属性; 只在可编辑的div中粘贴才触发paste事件; 在div里粘贴截图,直接显示,imgsrc为base64编码字符串; 在div里粘贴网页,表现同chrome。

监听了paste事件,也知道了表现形式,接下来就是如何获取数据了:

chrome有特定的方法,利用clipboardDataitems、getAsFile()、new FileReader()等api可以在paste回调函数里获取到剪贴板里的base64编码字符串(无论是截图粘贴的还是网页复制粘贴的),ie11,firefox没有这样的api,不过依然有办法可以获取,因为数据已经表现在img的src里了,对于截图粘贴的,直接取img的src属性值(base64),对于网页粘贴的,则把地址传给后台,然后根据地址down下来,存在自己的服务器,最后把新地址返回来交给前端展示就ok了。为了保持一致性便于管理,统一将所有情况(截图、网页)中的img的src属性替换为自己存储的地址。因此可以得到以下核心代码(注释很全哦~~):

html展示:

<head> <meta charset="UTF-8"> <title>Document</title> <style> body { display: -webkit-flex; display: flex; -webkit-justify-content: center; justify-content: center; } #tar_box { width: 500px; height: 500px; border: 1px solid red; } </style>

前端js处理逻辑:

documentaddEventListener('paste', function (event) { consolelog(event) var isChrome = false; if ( eventclipboardData || eventoriginalEvent ) { //not for ie11 某些chrome版本使用的是eventoriginalEvent var clipboardData = (eventclipboardData || eventoriginalEventclipboardData); if ( clipboardDataitems ) { // for chrome var items = clipboardDataitems, len = itemslength, blob = null; isChrome = true; //itemslength比较有意思,初步判断是根据mime类型来的,即有几种mime类型,长度就是几(待验证) //如果粘贴纯文本,那么len=1,如果粘贴网页,len=2, items[0]type = 'text/plain', items[1]type = 'image/' //如果使用截图工具粘贴,len=1, items[0]type = 'image/png' //如果粘贴纯文本+HTML,len=2, items[0]type = 'text/plain', items[1]type = 'text/html' // consolelog('len:' + len); // consolelog(items[0]); // consolelog(items[1]); // consolelog( 'items[0] kind:', items[0]kind ); // consolelog( 'items[0] MIME type:', items[0]type ); // consolelog( 'items[1] kind:', items[1]kind ); // consolelog( 'items[1] MIME type:', items[1]type ); //阻止默认行为即不让剪贴板内容在div中显示出来 eventpreventDefault(); //在items里找粘贴的image,据上面分析,需要循环 for (var i = 0; i < len; i++) { if (items[i]typeindexOf("image") !== -1) { // consolelog(items[i]); // consolelog( typeof (items[i])); //getAsFile() 此方法只是living standard firefox ie11 并不支持 blob = items[i]getAsFile(); } } if ( blob !== null ) { var reader = new FileReader(); readeronload = function (event) { // eventtargetresult 即为的Base64编码字符串 var base64_str = eventtargetresult //可以在这里写上传逻辑 直接将base64编码的字符串上传(可以尝试传入blob对象,看看后台程序能否解析) uploadImgFromPaste(base64_str, 'paste', isChrome); } readerreadAsDataURL(blob); } } else { //for firefox setTimeout(function () { //设置setTimeout的原因是为了保证先插入到div里,然后去获取值 var imgList = documentquerySelectorAll('#tar_box img'), len = imgListlength, src_str = '', i; for ( i = 0; i < len; i ++ ) { if ( imgList[i]className !== 'my_img' ) { //如果是截图那么src_str就是base64 如果是复制的其他网页那么src_str就是此在别人服务器的地址 src_str = imgList[i]src; } } uploadImgFromPaste(src_str, 'paste', isChrome); }, 1); } } else { //for ie11 setTimeout(function () { var imgList = documentquerySelectorAll('#tar_box img'), len = imgListlength, src_str = '', i; for ( i = 0; i < len; i ++ ) { if ( imgList[i]className !== 'my_img' ) { src_str = imgList[i]src; } } uploadImgFromPaste(src_str, 'paste', isChrome); }, 1); } }) function uploadImgFromPaste (file, type, isChrome) { var formData = new FormData(); formDataappend('image', file); formDataappend('submission-type', type); var xhr = new XML>

可以通过以下 *** 作来实现。

1、单击视图菜单下的任务窗格命令;

2、在任务窗格中,选择剪贴板,如图所示;

3、剪贴板中,可以查看剪切板中的内容,如图所示。

<input type="text" id="copyText" value="" style="color:#fff; background:#fff; border-color:#fff;border: 0; position:absolute; top:-50px; left:0;" />

<script type="text/jscript">

//复制文本

function copyText(str)

{

if(strlength >0)

{

$("#copyText")val(str);

//复制文本

var input = documentgetElementById("copyText");

inputvalue = str; // 修改文本框的内容

inputselect(); // 选中文本

documentexecCommand("copy"); // 执行浏览器复制命令

//layer提示框

layercloseAll('msg',{time:10000});

layermsg('<span style="color:red;">已复制:</span></br>'+str);

}

}

</script>

<a href="jscript:copyText('要复制的内容')">要复制的内容</a>

这是代码,这里的文本框不能设置隐藏,否则复制失效,所以我设置的样式让它在浏览器之外的地方,无法被看到

javascript代码

<SCRIPT LANGUAGE="JavaScript">

function copyText(text)

{

windowclipboardDatasetData("text",text);

}

</SCRIPT>

HTML代码

<body onload=copyText('123')>

</body>

以上就是关于谷歌浏览器 怎么用js复制东西到剪贴板全部的内容,包括:谷歌浏览器 怎么用js复制东西到剪贴板、如何用js实现复制到剪贴板、js怎么实现将截图,或者复制的图片用ctrl+v等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9527114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存