如何将文本自动附加到使用JavaScript复制的文本中

如何将文本自动附加到使用JavaScript复制的文本中,javascript,html,xhtml,copy,copy-paste,Javascript,Html,Xhtml,Copy,Copy Paste,在JavaScript中,如何选择网站上的文本,复制它(通过Control+C、Command+C或Edit copy),并让JavaScript在剪贴板上附加一两行内容,以便用户粘贴时,显示他们复制的内容以及额外的行 此外,这是否只能在站点的某些范围内进行?如果是,如何使用?您可以结合使用execCommand(“复制”)和execCommand(“粘贴”)来完成您想要的任务 这将帮助您: 我在faqs.org网站[1]上发现了这一点,我也很好奇。他们使用了tynt.com上的一些javasc

在JavaScript中,如何选择网站上的文本,复制它(通过Control+C、Command+C或Edit copy),并让JavaScript在剪贴板上附加一两行内容,以便用户粘贴时,显示他们复制的内容以及额外的行


此外,这是否只能在站点的某些
范围内进行?如果是,如何使用?

您可以结合使用
execCommand(“复制”)
execCommand(“粘贴”)
来完成您想要的任务

这将帮助您:


我在faqs.org网站[1]上发现了这一点,我也很好奇。他们使用了tynt.com上的一些javascript。我还发现一个ask metafilter答案[2]指向另一个javascript。它们应该是良好的起点。我自己还没有弄清楚,但我希望你可以将事件侦听器附加到正在讨论的div上


  • 我开发了一个脚本来实现这一点(以及关于这一点的博客帖子):

    
    $(“body”).bind('copy',函数(e){
    如果(typeof window.getSelection==“undefined”)返回;//IE8或更早版本。。。
    var body_element=document.getElementsByTagName('body')[0];
    var selection=window.getSelection();
    //如果选择很短,我们就不要打扰我们的用户
    if((“”+选择)。长度<30)返回;
    //在可见区域外创建一个div
    var newdiv=document.createElement('div');
    newdiv.style.position='absolute';
    newdiv.style.left='-9999px';
    body_元素appendChild(newdiv);
    newdiv.appendChild(selection.getRangeAt(0.cloneContents());
    //我们需要一个标签解决方案
    //否则,“pre”中的文本将丢失所有换行符!
    if(selection.getRangeAt(0.commonAncestorContainer.nodeName==“PRE”){
    newdiv.innerHTML=“”+newdiv.innerHTML+”;
    }
    newdiv.innerHTML+=“

    更多信息请访问:©;MySite.com”; 选择。选择所有子项(newdiv); setTimeout(函数(){body_element.removeChild(newdiv);},200); });
    问题是,如何检测用户何时复制内容?然后我就可以从您发送给我的页面中找到如何执行该操作的方法了。jQuery具有一些优秀的内置复制/粘贴检测功能:有趣的事实:可以做到,非常无缝。(尝试按CTRL键复制内容)
    <script>
    $("body").bind('copy', function (e) {
        if (typeof window.getSelection == "undefined") return; //IE8 or earlier...
    
        var body_element = document.getElementsByTagName('body')[0];
        var selection = window.getSelection();
    
        //if the selection is short let's not annoy our users
        if (("" + selection).length < 30) return;
    
        //create a div outside of the visible area
        var newdiv = document.createElement('div');
        newdiv.style.position = 'absolute';
        newdiv.style.left = '-99999px';
        body_element.appendChild(newdiv);
        newdiv.appendChild(selection.getRangeAt(0).cloneContents());
    
        //we need a <pre> tag workaround
        //otherwise the text inside "pre" loses all the line breaks!
        if (selection.getRangeAt(0).commonAncestorContainer.nodeName == "PRE") {
            newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>";
        }
    
        newdiv.innerHTML += "<br /><br />Read more at: <a href='"
            + document.location.href + "'>"
            + document.location.href + "</a> &copy; MySite.com";
    
        selection.selectAllChildren(newdiv);
        window.setTimeout(function () { body_element.removeChild(newdiv); }, 200);
    });
    </script>