2009-07-31 5 views
9

Wie können Sie in JavaScript Text auf einer Website auswählen, kopieren (mit Strg + C, Befehl + C oder Bearbeiten) und an eine Zeile oder zwei Zeilen anhängen die Zwischenablage, also wenn der Benutzer klebt, wird der Inhalt, den sie kopierten, sowie die zusätzliche Linie gezeigt?Wie Text automatisch an Text angehängt wird, der mit JavaScript kopiert wurde

Auch wäre dies nur innerhalb bestimmter <div> s der Website möglich? Wenn das so ist, wie?

+0

Spaß Tatsache: [Fuchs Nachrichten] (http://www.foxnews.com/scitech/2012/03/0 6/Asteroiden-zu-Buzz-by-Erde-nächstes Jahr-Time-to-Call-Versicherung-Agent /) tut es, ziemlich nahtlos. (try CTRL-Kopieren Zeug) – ZJR

Antwort

1

Sie können eine Kombination von execCommand("Copy") und execCommand("Paste") verwenden, um zu erreichen, was Sie wollen.

Dies soll Ihnen helfen:

http://www.geekpedia.com/tutorial126_Clipboard-cut-copy-and-paste-with-JavaScript.html

+0

Das Problem ist, wie können Sie erkennen, wenn der Benutzer etwas kopiert? Dann könnte ich herausfinden, wie man es von der Seite, die du mir geschickt hast, macht. –

+6

jQuery verfügt über eine hervorragende integrierte Copy/Paste-Erkennung: http://www.devcurry.com/2009/07/detect-copy-paste-and-cut-operations-on.html –

1

ich über diese auf dem faqs.org Seite kam [1] und war zu neugierig. Sie benutzen etwas Javascript von tynt.com. Ich fand auch eine ask-metafilter Antwort [2], die auf ein anderes Javascript zeigt. Sie sollten gute Ausgangspunkte sein. Ich habe es selbst noch nicht ausgearbeitet, aber ich nehme an, dass Sie Event-Listener nur an das betreffende Div anhängen können.

  1. http://www.faqs.org/faqs/tv/sat-night-live/deep-thoughts/
7

ich ein Skript entwickelt, das dies tut (und here's der Blog-Post über diese):

<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>