2009-07-31 2 views
9

В JavaScript, как вы можете выбрать текст на веб-сайте, скопировать его (с помощью Control + C, Command + C или Edit Copy), а JavaScript добавить строку или две буфер обмена, поэтому, когда пользователь вставляет, отображается содержимое, которое они копируют, а также дополнительную строку?Как автоматически добавить текст в текст, скопированный с помощью JavaScript

Также, возможно ли это сделать только в пределах определенных <div> с сайта? Если да, то как?

+0

забавный факт: [лис новости] (http://www.foxnews.com/scitech/2012/03/0 6/asteroid-to-buzz-by-earth-next-year-time-to-call-insurance-agent /) делает это довольно легко. (попробуйте CTRL-Копирование вещей) – ZJR

ответ

1

Вы можете использовать комбинации execCommand("Copy") и execCommand("Paste"), чтобы выполнить то, что вы хотите.

Это должно помочь вам:

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

+0

Проблема в том, как вы можете обнаружить, когда пользователь что-то копирует? Тогда я мог бы понять, как это сделать с той страницы, которую вы мне прислали. – 2009-08-01 01:20:55

+6

jQuery имеет отличное встроенное решение для копирования/вставки: http://www.devcurry.com/2009/07/detect-copy-paste-and-cut-operations-on.html –

1

Я наткнулся на это на сайте faqs.org [1] и было любопытно, тоже. Они используют некоторые javascript из tynt.com. Я также нашел ответ ask-metafilter [2], указывающий на другой javascript. Они должны быть хорошей отправной точкой. Я еще не справился с этим, но я ожидаю, что вы сможете присоединить слушателей событий только к рассматриваемому div.

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

Я разработал сценарий, который делает это (и here's сообщение в блоге об этом):

<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> 
Смежные вопросы