在知乎复制的文本为什么会自带一些版权声明,这个功能是如何实现的?
比如说我复制的
123456
最后出现的是
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:stevenliuyi
链接:http://www.zhihu.com/question/20451870/answer/15168034
来源:知乎
123456
回复内容:
比如说我复制的
123456
最后出现的是
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:stevenliuyi
链接:http://www.zhihu.com/question/20451870/answer/15168034
来源:知乎
123456
大体思路:
答案区域监听
copy
事件,并阻止这个事件的默认行为。获取选中的内容(
window.getSelection()
)加上版权信息,然后设置到剪切板(clipboardData.setData()
)。
下面的代码实现了一个简单的DEMO
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> <div id="answer">测试数据<b>test</b></div> <script> function setClipboardText(event){ event.preventDefault(); var node = document.createElement('div'); //对documentfragment不熟,不知道怎么获取里面的内容,用了一个比较笨的方式 node.appendChild(window.getSelection().getRangeAt(0).cloneContents()); var htmlData = '<div>著作权归作者所有。<br />' + '商业转载请联系作者获得授权,非商业转载请注明出处。<br />' + '作者:tiantian<br />链接:http://segmentfault.com/u/tiantian_<br />' + '来源:segmentfault<br /><br />' + node.innerHTML + '</div>'; 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/oncopy
http://codebits.glennjones.net/editing/setclipboarddata.htm
没有这个问题啊

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법
