2009-07-31 20 views
9

En JavaScript, cómo puede seleccionar texto en un sitio web, copiarlo (mediante Control + C, Comando + C o Editar copia) y tener JavaScript anexar una o dos líneas a el portapapeles de modo que cuando el usuario pega, se muestra el contenido que copiaron, así como la línea adicional?Cómo agregar texto automáticamente al texto copiado con JavaScript

Además, ¿esto sería posible hacer solo dentro de ciertos <div> s del sitio? ¿Si es así, cómo?

+0

hecho de la diversión: [Fox noticias] (http://www.foxnews.com/scitech/2012/03/0 6/asteroid-to-buzz-by-earth-next-year-time-to-call-insurance-agent /) lo hace, bastante a la perfección. (intente CTRL-Copiar cosas) – ZJR

Respuesta

1

Puede usar una combinación de execCommand("Copy") y execCommand("Paste") para lograr lo que desea.

Esto debería ayudar a salir:

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

+0

El problema es, ¿cómo puede detectar cuándo el usuario copia algo? Entonces podría averiguar cómo hacerlo desde la página que me enviaste. –

+6

jQuery tiene una excelente detección incorporada de copiar/pegar: http://www.devcurry.com/2009/07/detect-copy-paste-and-cut-operations-on.html –

1

me encontré con esto en el sitio faqs.org [1] y era curioso también. Usan algunos javascript de tynt.com. También encontré una respuesta ask-metafilter [2] que apunta a un javascript diferente. Deben ser buenos puntos de partida. Todavía no lo he resuelto, pero espero que puedas conectar los oyentes de eventos solo con el div en cuestión.

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

he desarrollado un script que hace esto (y here's el post sobre esto):

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