84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
比如说我复制的
123456
最后出现的是著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作者:stevenliuyi链接:http://www.zhihu.com/question/20451870/answer/15168034来源:知乎
业精于勤,荒于嬉;行成于思,毁于随。
答案区域监听copy事件,并阻止这个事件的默认行为。
copy
获取选中的内容(window.getSelection())加上版权信息,然后设置到剪切板(clipboardData.setData())。
window.getSelection()
clipboardData.setData()
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> <p id="answer">测试数据<b>test</b></p> <script> function setClipboardText(event){ event.preventDefault(); var node = document.createElement('p'); //对documentfragment不熟,不知道怎么获取里面的内容,用了一个比较笨的方式 node.appendChild(window.getSelection().getRangeAt(0).cloneContents()); var htmlData = '<p>著作权归作者所有。<br />' + '商业转载请联系作者获得授权,非商业转载请注明出处。<br />' + '作者:tiantian<br />链接:http://segmentfault.com/u/tiantian_<br />' + '来源:segmentfault<br /><br />' + node.innerHTML + '</p>'; var textData = '著作权归作者所有。\n' + '商业转载请联系作者获得授权,非商业转载请注明出处。\n' + '作者:tiantian\n链接:http://segmentfault.com/u/tiantian_\n' + '来源:segmentfault\n\n' + window.getSelection().getRangeAt(0); if(event.clipboardData){ event.clipboardData.setData("text/html", htmlData); event.clipboardData.setData("text/plain",textData); } else if(window.clipboardData){ return window.clipboardData.setData("text", textData); } }; var answer = document.getElementById("answer"); answer.addEventListener('copy',function(e){ setClipboardText(e); }); </script> </body> </html>
看了知乎的代码,大致也是这么实现的,但是还加入了一些其他的判断,比如如果答案设置了不能复制,则阻止copy事件,并显示提示信息,如果复制的文本长度小于42的话,不会加上版权信息。
copy事件可以参考:https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/oncopyhttp://codebits.glennjones.net/editing/setclipboarddata.htm
没有这个问题啊
大体思路:
答案区域监听
copy
事件,并阻止这个事件的默认行为。获取选中的内容(
window.getSelection()
)加上版权信息,然后设置到剪切板(clipboardData.setData()
)。下面的代码实现了一个简单的DEMO
看了知乎的代码,大致也是这么实现的,但是还加入了一些其他的判断,比如如果答案设置了不能复制,则阻止
copy
事件,并显示提示信息,如果复制的文本长度小于42的话,不会加上版权信息。copy
事件可以参考:https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/oncopy
http://codebits.glennjones.net/editing/setclipboarddata.htm
没有这个问题啊