84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
比如说我复制的
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
没有这个问题啊