Как на самом деле использовать ZeroClipboard в JQuery?
Я просто не могу получить эту вещь. Как ZeroClipboard должен работать? Зачем нужно перемещать flash-элемент по скопированному тексту?
Я прочитал эту вещь: http://code.google.com/p/zeroclipboard/wiki/Instructions
Может ли кто-нибудь предоставить мне короткий фрагмент, который позволяет копировать текст в переменной в буфер обмена пользователя, когда пользователь нажимает на ссылку. Это вообще возможно? Мне все равно, если он не работает на всех браузерах (например, IE6).
Я использую JQuery.
4 ответа
Код "минимального примера", приведенный на странице, на которую вы ссылаетесь ( http://code.google.com/p/zeroclipboard/wiki/Instructions), кажется, вам нужен. Я скопировал его здесь и изменил, чтобы продемонстрировать помещение текста в переменную и последующее копирование этого текста в буфер обмена, поскольку это то, что вас интересует. Обратите внимание, что в реальной жизни вы, вероятно, захотите сделать это позвонить clip.setText()
часть в какой-то функции, так как вы можете не знать, в какой момент при первой загрузке страницы, какой текст вы хотите скопировать.
<html>
<body>
<script type="text/javascript" src="ZeroClipboard.js"></script>
<div id="d_clip_button" style="border:1px solid black; padding:20px;">Copy To Clipboard</div>
<script language="JavaScript">
var clip = new ZeroClipboard.Client();
var myTextToCopy = "Hi, this is the text to copy!";
clip.setText( myTextToCopy );
clip.glue( 'd_clip_button' );
</script>
</body>
</html>
Элемент flash не обязательно должен быть "поверх скопированного текста"; его нужно "приклеить" к любому элементу DOM, которым вы хотите, чтобы ваш пользователь манипулировал, - скорее всего, к нажатию кнопки. Причина в том, что у Javascript нет доступа к буферу обмена, поэтому вместо этого вам нужно использовать Flash. Но Flash может работать только на компьютере пользователя в ответ на щелчок пользователя - так что вы "обманываете" пользователя, нажимая на Flash, делая его невидимым наложением на элемент HTML.
Я отмечу, что, хотя конкретный пример копирования в буфер обмена пользователя, вероятно, является добрым, этот подход меня беспокоит, так как было бы несложно представить, как скрытый элемент флэш-памяти делает больше вредоносных действий.
Немного более сложный пример jquery. Скопируйте текст, когда
<script language="JavaScript">
ZeroClipboard.setMoviePath('zeroclipboard/ZeroClipboard.swf');
$(document).ready(function(){
$(".clickme").each(function (i) {
var clip = new ZeroClipboard.Client();
var myTextToCopy = $(this).val();
clip.setText( myTextToCopy );
clip.addEventListener('complete', function (client, text) {
alert("Copied text to clipboard." );
});
clip.glue( $(this).attr("id") );
});
});
</script>
<?php
//these text boxes were in a loop
for($i=0;$i<10;$i++)
echo "<input type=\"text\" id=\"x$i\" class=\"clickme\" value=\"$value"\" />";
?>
Этот код работает в моей настройке только вместе с Chrome, когда у меня есть тег в области тела, например
<script type="text/javascript" src="js-file-doesnt-exists-404.js"></script>
<div>
......
some stuff here
......
....
</div>
...some more stuff....
<the button>
....
при удалении файла-включения кнопка не работает.... действительно странно
Текущая версия ZeroClipboard на самом деле содержит ошибку, которая может вызвать ошибку JS с использованием сценария, предложенного JacobM, - в следующем сценарии:
- Создайте ссылку на ZeroClipboard.Client(), возвращенную из нового конструктора. (например, var clip = new ZeroClipboard.Client();)
- Установите текст, выполнив clip.setText("string");
- Изменить DOM (скрыть флэш-фильм или элемент предка)
- Установите текст снова, выполнив clip.setText ("некоторая другая строка")
Чтобы избежать возникновения ошибок, для установки текста следует использовать слушатель события mouseover:
<html>
<body>
<script type="text/javascript" src="ZeroClipboard.js"></script>
<div id="d_clip_button">Copy To Clipboard</div>
<script language="JavaScript">
var clip = new ZeroClipboard.Client(),
myTextToCopy = "Hi, this is the text to copy!";
clip.glue('d_clip_button');
clip.addEventListener('onMouseOver', clipboardEvent);
function clipboardEvent() {
clip.setText( myTextToCopy );
}
</script>
</body>
</html>