2009-07-31 21 views
9

In JavaScript, come è possibile selezionare il testo su un sito Web, copiarlo (da Control + C, Command + C o Edit Copy) e fare in modo che JavaScript accoda una riga o due per gli appunti in modo che quando l'utente incolla, il contenuto copiato sia mostrato come la riga aggiuntiva?Come aggiungere automaticamente testo a testo copiato con JavaScript

Inoltre, sarebbe possibile eseguire solo entro certi <div> s del sito? Se é cosi, come?

+0

fatto divertente: [volpe News] (http://www.foxnews.com/scitech/2012/03/0 6/asteroid-to-buzz-by-earth-il-anno-prima-termine-assicurazione-agente /) lo fa, senza problemi. (prova CTRL-Copying stuff) – ZJR

risposta

1

È possibile utilizzare una combinazione di execCommand("Copy") e execCommand("Paste") per ottenere ciò che si desidera.

Questo dovrebbe aiutare a uscire:

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

+0

Il problema è, come puoi rilevare quando l'utente copia qualcosa? Poi ho potuto capire come farlo da quella pagina che mi hai mandato. –

+6

jQuery ha un eccellente rilevamento incorporato di copia/incolla: http://www.devcurry.com/2009/07/detect-copy-paste-and-cut-operations-on.html –

1

mi sono imbattuto in questo sul sito faqs.org [1] ed era curioso anche. Usano qualche javascript da tynt.com. Ho anche trovato una risposta ask-metafilter [2] che indicava un javascript diverso. Dovrebbero essere buoni punti di partenza. Non l'ho ancora elaborato, ma mi aspetto che potresti collegare gli ascoltatori di eventi al solo div in questione.

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

ho sviluppato uno script che fa questo (e here's il post su questo blog):

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